Java - 对象属性没有区别

时间:2012-11-02 09:57:35

标签: java

ClassName ref = new ClassName();
ref.setCredentials(Credentials);
ref.setVal(value);
ref.setUser(user);

现在,当我创建一个具有相同类引用的新对象时,我仍然可以获得之前设置的值。为什么会这样?

ClassName ref2 = new ClassName();
ref2.setVal(value);
ref2.setUser(user);
ref2.setSomethingNew(somethingNew);

我的refref2个实例拥有所有值[Credentials, Value, User and SomethingNew]。我想区分这两个实例。是因为它持有相同的物体吗?

更新我的失效:

实际上是ref2而不是ref。我得到ref2中未设置的值,ref也包含我在ref2实例中设置的值。两者都在相同的背景下。

2 个答案:

答案 0 :(得分:6)

请注意,对于ref2,您只是创建对象,但是您将值设置为ref。你需要:

ClassName ref2 = new ClassName();
ref2.setVal(value);
ref2.setUser(user);
ref2.setSomethingNew(somethingNew);

请注意ref2更改而不是ref

如果ClassName覆盖了equals方法,并且所有内部对象也相同,则refref2之间的相等是正常的。您可以使用Object.equals实施来检测对象是否不同(请注意differentequal)。

答案 1 :(得分:3)

如果您在创建ref之后设置ref2,这就是您应该期待的。这样做:

ref2.setVal(value);

注意:请勿这样做:

ref.setCredentials(Credentials);

它会在Credentials上设置 ref