variable1 = value_of_A;
for loop {
//some calculations over value_of_A,
//so it is not anymore the same as in variable1
}
variable2 = value_of_A;
当我比较variable1
和variable2
时,它们始终是相同的。我尝试过新类,因此setter可以存储值,方法,所有类型的变量定义等。
到目前为止可能的解决方案:将variable1
写入文件,然后在for循环后读取它。这应该有效,但任何其他解决方案?
答案 0 :(得分:2)
我猜你的问题是你正在处理对象,而Java对象是通过引用传递的。这意味着,您可能有一个对象和两个引用它的变量,当您通过第一个引用变量(variable1
)更改对象时,第二个引用变量(variable2
)现在允许您访问同一个对象,已经改变了。您的解决方案是在循环中创建一个新对象,并将此新对象的引用分配给variable2
,这样您就必须对每个对象进行单独引用。
// suppose this is the class you are working with
public class SomeObject {
private String nya;
public SomeObject(String value) {
nya = value;
}
public String getValue() {
return nya;
}
public void changeByValue(int value) {
nya += "Adding value: " + value;
}
}
// and here comes the code that changes the object
// we assign the first variable the original object
SomeObject variable1 = someObject;
// but we do not assign the same object to the second one,
// instead we create the identical, but new object
SomeObject variable2 = new SomeObject(someObject.getValue());
for (int i = 0; i < 10; i++) {
// here we change the second (new) object, so the original stays the same
variable2.changeValueBy(i);
}
System.out.println(variable1 == variable2); // false
System.out.println(variable1.equals(variable2)); // depends on implementation
答案 1 :(得分:1)
在Java中,使用对象时,实际上只是对该对象的引用。这意味着,如果你有这样的东西
SomeObject o1 = new SomeObject();
SomeObject o2 = o1;
然后o1
和o2
指向同一个对象,因此o1
中所做的更改也会影响o2
。这称为Aliasing。
为了比较两个不同的对象,您可以使用对象的复制,然后在for
循环中更改它。
// This is the object we want to work on.
SomeObject changing = new SomeObject();
// Copy-Constructor, where you assign the fields of 'changing' to a new object.
// This new object will have the same values as 'changing', but is actually a new reference.
SomeObject o1 = new SomeObject(changing);
for loop {
// This operation alters 'changing'.
someOperationOn(changing);
}
// Again, a copy constructor, if you want to have another, different reference.
SomeObject o2 = new SomeObject(changing);
现在你有两个对象o1
和o2
不再相互影响。
答案 2 :(得分:0)
你的变量是什么类型的?在我看来,这是一个&#34;按价值&#34; vs&#34;参考&#34;问题。看看这个问题here。 基本上,根据变量的类型,&#34; =&#34;然后计算不会创建新对象。你还有一个对内存中同一个对象的引用。