Person p = new Person(23, "zhang");
Person p1 = p;
System.out.println(p);
System.out.println(p1);
当 Person p1 = p;执行之后,是创建了一个新对象吗?首先看打印结果:
clone_test.Person@7b23ec81
clone_test.Person@7b23ec81
可以看出,打印的地址值是相同的,即然地址都是相同的,那么肯定是同一个对象。p 和 p1 只是引用而已,它们都指向了一个相同的对象 Person(23," zhang")。可以把这种现象叫做引用的复制。上面代码执行完成之后,内存中的情况如下图所示:
而下面的代码真真正正的克隆了一个对象。
Person p = new Person(23, "zhang");
Person p1 = (Person) p.clone();
System.out.println(p);
System.out.println(p1);
从打印结果可以看出,两个对象的地址是不同的,也就是说创建了新的对象,而不是把原对象的地址赋给了一个新的引用变量:
clone_test.Person@7b23ec81
clone_test.Person@6acbcfc0
以上代码执行完成后,内存的情况如下图所示: