假设有两个class:A和B
public class A{
  public int i;
  public B b;
  public A{
    i=0;
    b=new B();
  }
}
public class B{
  public int j;
  public B(){
    j=0;
  }
}现在你要copy A类型的对象
public A shallowCopy (A a){
  A ca=new A();
  ca.i=a.i;//深拷贝,因为基本类型是直接传值
  ca.b=a.b;//浅拷贝,非基本类型传递的是对象的引用
  return ca;
}所以,如果你使用这个函数
A a=new A();
A da=shallowCopy(a);
则da.b跟a.b指向的是同一个对象。如果你希望更深一层的copy
可以实现B的clone方法
public class B{
 public int j;
 public B(){
   j=0;
 }
 public Object clone(){
   B b=new B();
   b.j=this.j;
   return j;
 }
}则深拷贝方法实现如下
public A deepCopy(A a){
  A ca=new A();
  ca.i=a.i;
  ca.b=(B) a.b.clone();
  return ca;
}这时,两个A类型的对象指向不同的B类型对象