我有课,里面有代码:
MyClass x= value1;
MyClass y= value2;
void change (MyClass x,y) {
MyClass temporary= x;
x=y;
y=temp;
}
我的问题是为什么我的对象不会改变它们的值(在运行此方法之前x和y将指向值)?以及如何改变它们?
答案 0 :(得分:3)
对象不会更改其值,因为您的代码不会更改对象的值。它交换引用,它们已复制到参数x
和y
中,这些参数是change
方法的本地参数。
如果你想让对象交换它们的值,给它们一个方法来获取和设置它们可能代表的任何值。代码如下所示:
void change (MyClass x,y) {
MyClass temporary= new MyClass();
temporary.copyFrom(x);
x.copyFrom(y);
y.copyTo(temporary);
}
copyTo
是您添加的方法,用于复制MyClass
的内部状态。这是一个小例子:
class MyClass {
private String firstName;
private String lastName;
public MyClass(String first, String last) {
firstName = first;
lastName = last;
}
public void CopyFrom(MyClass other) {
firstName = other.firstName;
lastName = other.lastName;
}
}