值传递
比如我们的基本数据类型
int char double long byte boolean long short
引用传递
除此以为的都是引用传递,尤其是我们在构造函数的参数时候
clone
1.拷贝对象返回的是一个新的对象,而不是一个对原来对象的引用
2.拷贝对象与用new操作符返回的对象不同的是这个拷贝已经包含了原有对象的一些信息,而不是一个对象的初始值
比如这个常见的例子
class CloneClass implements Cloneable{
public int aInt;
public Object clone(){
CloneClass o = null;
try{
o = (CloneClass)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
影子克隆
其实说白了 就是非基本类型在clone的时候也要实现clonealbe接口,这种克隆的效果就是感觉新对象没有全部信息的获取
深度克隆
class UnCloneA implements Cloneable{
private int i;
public UnCloneA(int ii) { i = ii; }
public void doublevalue() { i *= 2; }
public String toString() {
return Integer.toString(i);
}
public Object clone(){
UnCloneA o = null;
try{
o = (UnCloneA)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
class CloneB implements Cloneable{
public int aInt;
public UnCloneA unCA = new UnCloneA(111);
public Object clone(){
CloneB o = null;
try{
o = (CloneB)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
o.unCA = (UnCloneA)unCA.clone();
return o;
}
}
比如我们的基本数据类型
int char double long byte boolean long short
引用传递
除此以为的都是引用传递,尤其是我们在构造函数的参数时候
clone
1.拷贝对象返回的是一个新的对象,而不是一个对原来对象的引用
2.拷贝对象与用new操作符返回的对象不同的是这个拷贝已经包含了原有对象的一些信息,而不是一个对象的初始值
比如这个常见的例子
class CloneClass implements Cloneable{
public int aInt;
public Object clone(){
CloneClass o = null;
try{
o = (CloneClass)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
影子克隆
其实说白了 就是非基本类型在clone的时候也要实现clonealbe接口,这种克隆的效果就是感觉新对象没有全部信息的获取
深度克隆
class UnCloneA implements Cloneable{
private int i;
public UnCloneA(int ii) { i = ii; }
public void doublevalue() { i *= 2; }
public String toString() {
return Integer.toString(i);
}
public Object clone(){
UnCloneA o = null;
try{
o = (UnCloneA)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
class CloneB implements Cloneable{
public int aInt;
public UnCloneA unCA = new UnCloneA(111);
public Object clone(){
CloneB o = null;
try{
o = (CloneB)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
o.unCA = (UnCloneA)unCA.clone();
return o;
}
}