我不确定我是否正确,但我在我的课程中有一个方法,我创建了一个类的实例来保存数据,因为有些转换。但是,当我从某个地方打电话时:
public static void otherClassMethod(MyClass myClass) {
MyClass m = myClass.doStuff(); // 1
}
public class MyClass {
private Item myItem;
private int mCount;
public void add(Item item) {
if (mCount == 0) {
myItem = item;
myItem.setNext(null); // 2
mCount++;
} else {
....
}
}
public MyClass doStuff() {
if (mCount == 0) return null;
MyClass m = new MyClass();
Item i = myItem;
do {
m.add(i); // 3
i = i.getNext(); // 4
} while (i != null);
return m;
}
}
在(4)中它改变了变量(2)的m(3)和myClass(1),为什么(1)? 我不知道到底我到底是什么,你能给我一个提示吗? 感谢。
答案 0 :(得分:0)
您指的两个变量都是相同的。因为每次调用doStuff()
方法时,都会创建MyClass
的新实例并将其返回。
这个实例在(1)和(3)处得到改变。
如果您只想修改特定实例,请尝试将其传递给doStuff()
方法,而不是创建新实例。像这样:
public void doStuff(MyClass s){
//..
}
现在,当您调用此方法时,只有传递给方法的实例才会更改。 希望它有所帮助。
答案 1 :(得分:0)
谢谢你们@Ryan J,@ hitz。我完全忘记了它是一个正在传递的对象,因此对它的值的引用是相同的。
我改变了(3):
m.add(i);
为:
m.add(new Item(i.getA(), ..));
如果有人在寻找答案:
Object a = new Object();
Object b = a; // they are refering to the same reference, so they will change as one
Object c = new Object(a.getParam()); // set through a constructor parameter
Object d = new Object();
d.setParam(a.getParam()); // set through setter and getter