【问题标题】:Creating a seperate object and editing it from an object reference in Java创建一个单独的对象并从 Java 中的对象引用编辑它
【发布时间】:2015-06-11 04:13:21
【问题描述】:
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 的字符串。

非常感谢您的帮助!

【问题讨论】:

    标签: java string oop object pass-by-reference


    【解决方案1】:

    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
    

    【讨论】:

    • 那太好了,谢谢,但是 MyClass myClass = new MyClass("stuff");不工作?那么我最初将如何创建这个类呢?
    • @ErlangBestLanguage 你可以保留两个构造函数。
    • 哇,我不知道你能做到,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2014-11-24
    • 2019-08-13
    相关资源
    最近更新 更多