创建单独的对象并使用Java中的对象引用对其进行编辑

时间:2015-04-06 18:01:52

标签: java string oop 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());
    }
}

两个对象都将返回相同的东西(" stuffanything"),我想这是因为Java通过引用传递对象变量,无论如何要避免这种情况吗?我只想编辑myNewClass的字符串。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

myClassmyNewClass指的是完全相同的对象。修改一个州的状态将修改其他状态。你想要的是同一个对象的副本。一种方法是通过定义复制构造函数来复制给定对象的字段:

public MyClass(MyClass myClass) {
    this.a = myClass.a;
}

然后您可以按如下方式创建对象的副本:

MyClass myClass = new MyClass("stuff");
MyClass myNewClass = new MyClass(myClass);
myNewClass.editString();
System.out.println(myClass.getString());
System.out.println(myNewClass.getString());

输出:

stuff
stuffanything