【问题标题】:Two java variables referencing same string object don't sync引用相同字符串对象的两个 java 变量不同步
【发布时间】:2016-01-10 14:24:36
【问题描述】:

从我的Java对象新手的角度来看,如果两个变量引用一个对象,更新一个变量应该对另一个变量执行相同的操作,如下代码所示:

SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // print second
System.out.println(s2.getText()); // print second as well

我引用了这个thread的代码。

但是,这不适用于 String 类。见以下代码:

String s_1 = new String("first");
String s_2 = s_1;
s_2 = "second";
System.out.println("s_1: " + s_1 + " s_2:  " + s_2); 
//s_1 appears to be "first" and s_2 "second"

这是因为String类和自声明类的区别吗?感谢您的帮助!

【问题讨论】:

    标签: java


    【解决方案1】:

    不,不同之处在于您所做的更改。

    这段代码:

    s2.setText("second")
    

    不会更改s2s1 的值。 s1s2 都像以前一样引用同一个对象……但是对象的内容已经改变了。

    与此代码比较:

    s_2 = "second";
    

    在这里,您将s2 的值更改为对不同对象的引用。更改 s_2 的值根本不会更改 s_1 的值 - 它仍然引用它之前所做的相同对象。

    您可能想阅读the differences between variables, objects and references - 一旦您能够清楚地了解这一点,其他一切都会变得更有意义。

    【讨论】:

      【解决方案2】:

      可以在不调用构造函数的情况下初始化String 对象。因此,当您将 s_2 初始化为 s_1 时,它会被赋予它的值,而当您初始化 s_2 = "second" 时,它会被覆盖。与s2 = s1 相同,然后是s2 = new SomeObject ("second")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        相关资源
        最近更新 更多