Erl*_*age 1 java oop string object pass-by-reference
public class MyClass {
public MyClass(String a) {this.a = a;}
public void editString() {a = a + "anything";}
public String getString() {return a;}
}
public class test {
public test() {
MyClass myClass = new MyClass("stuff");
MyClass myNewClass = myClass;
myNewClass.editString();
System.out.println(myClass.getString());
System.out.println(myNewClass.getString());
}
}
Run Code Online (Sandbox Code Playgroud)
两个对象都会返回相同的东西("stuffanything"),我想这是因为Java通过引用传递对象变量,无论如何要避免这种情况吗?我只想编辑myNewClass的字符串.
非常感谢您的帮助!
myClass并myNewClass指向完全相同的对象.修改一个人的状态会修改另一个人的状态.你想要的是同一个对象的副本.一种方法是通过定义复制构造函数来复制给定对象的字段:
public MyClass(MyClass myClass) {
this.a = myClass.a;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建对象的副本,如下所示:
MyClass myClass = new MyClass("stuff");
MyClass myNewClass = new MyClass(myClass);
myNewClass.editString();
System.out.println(myClass.getString());
System.out.println(myNewClass.getString());
Run Code Online (Sandbox Code Playgroud)
哪个输出:
stuff
stuffanything
Run Code Online (Sandbox Code Playgroud)