一开始学习的是C++,然后学习java时就了解到java是不存在指针这个东西的,然后就想到那java里数据的对应关系怎么搞呢?之后就糊里糊涂地过去了,现在看到clone方法,就简单从clone方法了解了一下java的“类指针”。
基础知识:java对对象的处理和基本类型数据的处理不一样,java中入口对象参数是缺省为引用调用,也就是说仅仅传递了对象的一个引用,而不是创建了一个新对象。因此对方法中对对象进行处理时,就是在修改原对象。顺便总结——List<Map> 循环取值修改时也是直接修改了list中的对象。
java中一般使用clone方法来复制对象,首先需要知道想要使用clone方法的类必须要implement Cloneable抽象类。 clone主要有三种:浅复制、深度复制、clone彻底。
浅复制(影子clone):复制类中的基本类型数据。
public class Test implement Cloneable{
public String name;
public Object clone(){
Test test=null;
try{
test=(Test)super.clone();
}catch(Exception e){
e.printStackTrace();
}
return test;
}
}
深度复制:如果是数组或者是复杂类型就需要重定义复制过程。不然就相当与引用,共用一个数据。
如上面的例子,多一个String[] nameArray[10];那就需要在调用父方法后使用
test.nameArray=(String[])nameArray.clone();
clone彻底:当存在存储对象的容器时,如vector。eg:Vector<B> vector;
test.vector=new Vector<B>();
for(int i=0;i<vector.size();i++){
B temp=vector.get(i).clone();
test.vector.add(temp);
}