在书上看到这么一段话,不太理解,所以想来向大家求教一下,正文如下:
Complex z = t;
for (int i = 0; i < N-1; i++)
{
  z.mult(t);
}
因为z和t是对同一个对象的引用,而不是不同的对象。这段代码实际上计算的是t的2的N次方(t的右上角一个2,2的右上角一个N),而不是t的N次方。问题在于我们期望赋值语句拷贝对象,但他实际拷贝的是对象的引用。读了好几遍都不太明白,有谁能够帮忙解释一下?谢谢了。

解决方案 »

  1.   

    那段话的意思是说:
        在JAVA中并没有C++中的拷贝构造函数,当两个引用变量赋值的时候,双方引用的是同一个对象,这种现象称之为同名现象,这时对象并没有被复制,复制的只是对对象的引用。所以,这时只要通过其中的一个引用变量修改对象的属性,修改得到的结果在另一个引用变量上也是可见的,应为对象实体在内存中只有一个。
        如果真正想要克隆一个对象,可以这样去做:
        (1)重写由Object类继承下来的clone()方法,但这样只适合你的类比较简单,容易控制类内部的成员都被复制,如果类的继承比较复杂,克隆后的结果可能不是我们想要的;
        (2)另外一种方法比较复杂,但效果很好,首席让一个类实现Sierizable接口,然后把这个类的实例用对象流写入内存,然后再用对象流把这个对象从内存中读出来,这时就完成了克隆,这用能保证对象中的所有原始类型都被复制,对象中所有的引用成员,只要他的类也实现了Sierizable接口,也会被完全克隆。