遇到一个问题
一个函数
Object change(Object obj){}
调用函数传入对象obj
在函数里可能对这个对象要进行改变,
如果改变要将改变之后的对象返回
如果不改变就将对象原样返回所以 这样在函数里就涉及到一个对象深度复制的问题
应该怎么办呀?
这个对象中成员变量不仅是基本的数据类型,
还包括对象,
应该怎以办呢?
一个函数
Object change(Object obj){}
调用函数传入对象obj
在函数里可能对这个对象要进行改变,
如果改变要将改变之后的对象返回
如果不改变就将对象原样返回所以 这样在函数里就涉及到一个对象深度复制的问题
应该怎么办呀?
这个对象中成员变量不仅是基本的数据类型,
还包括对象,
应该怎以办呢?
public class test implements Cloneable
{
....
public Ojbect clone()
{
Object tmpObj=super.clone();//这里要做异常处理,否则编译不过;
return (test)tmpObj;
}
}
这个clone()方法也只能复制基本数据类型
如果有类的成员变量的话
clone()方法也只是复制一个引用吧,
外面改了,那备份的这个对象也改了呀
import java.io.ByteArrayInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
public class CloneObject {
public CloneObject() {
}
public Object clone(Object obj) {
try {
ByteArrayOutputStream bout = new
ByteArrayOutputStream();
ObjectOutputStream out
= new ObjectOutputStream(bout);
out.writeObject(obj);
out.close(); ByteArrayInputStream bin = new
ByteArrayInputStream(bout.toByteArray());
ObjectInputStream in = new ObjectInputStream(bin);
Object newObj = in.readObject();
in.close(); return newObj;
} catch(Exception e) {
e.printStackTrace();
return null;
} }
}public class Test extends java.lang.Object implements java.io.Serializable
{
public int a = 0;
public String aa="";
//public Test test = new Test(55,"121");
public Test(int aaa,String str)
{
a=aaa;
aa =str;
}
public static void main(String[] args)
{
Test test = new Test(1,"1");
CloneObject cobj = new CloneObject();
Test test1 =(Test) cobj.clone(test);
test.a = 20;
test.aa = "20";
System.out.println("Test1的值:"+test1.a+"/"+test1.aa);
System.out.println("Test的值:"+test.a+"/"+test.aa);
}
}
只要你把所有的相关对象都实现cloneable 那不就能深拷贝了??