相关疑难解决方法(0)

如何在Java中复制对象?

请考虑以下代码:

DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'

DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'

dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
Run Code Online (Sandbox Code Playgroud)

所以,我想复制dumdumtwo并更改dum而不影响dumtwo.但上面的代码并没有这样做.当我改变某些内容时dum,也会发生同样的变化dumtwo.

我想,当我说dumtwo = dum,Java 复制引用.那么,有没有办法创建一个新的副本dum并分配给它dumtwo

java clone copy object

763
推荐指数
18
解决办法
109万
查看次数

什么时候Java对象可以序列化而不是Cloneable?

如果Java类实现了Serializable接口但没有公共clone()方法,通常可以创建如下的深层副本:

class CloneHelper {
    @SuppressWarnings("unchecked")
    public static <T extends Serializable> T clone(T obj) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(obj);
            oos.close();
            byte[] bytes = baos.toByteArray();
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            T copy = (T) ois.readObject();
            ois.close();
            return copy;
        } catch (ClassNotFoundException ex) {
            // Shouldn't happen
            throw new Error(ex);
        } catch (IOException ex) {
            // Probably a bug in T's custom serialization methods
            throw …
Run Code Online (Sandbox Code Playgroud)

java serialization serializable deep-copy cloneable

7
推荐指数
2
解决办法
2932
查看次数

标签 统计

java ×2

clone ×1

cloneable ×1

copy ×1

deep-copy ×1

object ×1

serializable ×1

serialization ×1