2016-01-10 39 views
0

從Java對象的新手我的角度來看,如果兩個變量引用一個對象,更新一個變量應該做同樣的給對方,作爲代碼顯示如下:兩個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" 

這是因爲字符串類和自我聲明的類之間的區別?感謝您的幫助!

回答

4

不,差別在於你所做的改變。

此代碼:

s2.setText("second") 

不會改變任一s2s1的值。 s1s2都指向與之前相同的對象...但對象的內容已更改。

相比之下,與此代碼:

s_2 = "second"; 

這裏你改變的s2價值是不同的對象的引用。更改s_2的值完全不會改變s_1的值 - 它仍然引用與之前相同的對象。

你可能想要閱讀the differences between variables, objects and references - 一旦你能夠清楚地理解你的頭腦,其他一切都會變得更有意義。

0

A String可以在不調用構造函數的情況下初始化對象。所以當你初始化s_2s_1時,它被賦予它的值,當你初始化s_2 = "second"時,它被覆蓋。它與s2 = s1相同,然後是s2 = new SomeObject ("second")

相關問題