我在java中有一个类有问题
此类是public并且是DefaultHandler的扩展 这个类的所有方法都是公共的......但变量是私有的......
我的问题是,如果我复制其他变量中的值并修改第二个变量,那么第一个变量也是如此。
就像静态变量..但它们不是静态的......任何想法!!!
提前致谢
答案 0 :(得分:4)
这是因为您实际上正在修改同一个对象。例如,如果你有
Object obj = new Object();
Object obj2 = obj;
你实际上并没有复制任何东西,你只需要obj2“指向”(不是正确的术语,但它现在可以工作)到obj。对obj2的任何更改都将反映在obj中。因此,如果要实际复制它,则需要物理创建新对象,然后手动将所有值复制到新创建中。您可以实现prototype pattern来复制对象。基元不会以这种方式运行,因此如果您使用double
或int
执行相同的操作,它将按照您期望的方式运行。
所有这些都有意义吗?
答案 1 :(得分:0)
您可能在通过引用传递和传递值时遇到问题。这个页面解释了我的意思http://www.cs.umd.edu/class/sum2004/cmsc420/sum4v3e01/node6.html。
答案 2 :(得分:0)
您可能正在将引用复制到可更改对象,而不是对象本身;所以在复制之后,你有两个对同一个对象的引用。通过任一引用更改该对象将具有相同的效果。
我无法告诉你如何复制实际的对象,因为没有通用的方法来做,但许多类提供了复制构造函数或其他一些方法来复制自己。如果您需要帮助,则必须提供更多详细信息。