我不确定我是否正确,但是我的课程中有一个方法,在该方法中,我在其中创建了一个课程实例以存放数据,以存放数据。但是,当我从某个地方打电话:
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)中它更改(3)的m和(1)的myclass的变量(2),为什么也(1)?我不知道我到底是什么,你能给我一个提示吗?谢谢。
您指的两个变量都是相同的。因为每次调用doStuff()
方法时,都会创建MyClass
的新实例并将其返回。正是此实例在(1)和(3)中更改。
如果您只想修改特定实例,请尝试将其传递给doStuff()
方法,而不是创建新实例。这样的东西:
public void doStuff(MyClass s){
//..
}
现在,当您调用此方法时,只有传递给方法的实例才会更改。希望它有帮助。
谢谢你们@Ryan J,@hitz。我总共忘记了它是一个传递的对象,因此引用其值是相同的。
我从:
更改(3) m.add(i);
to:
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