歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java關於String類的賦值符號一些驗證

Java關於String類的賦值符號一些驗證

日期:2017/3/1 9:16:42   编辑:Linux編程

我們都知道,很多Java書中說String對象的內容不能修改,但在實際情況中賦值符號還是可以用在已創建的String類對象中,如下面的代碼所示:

String s1 = "abs";
String s2 = "abs";
System.out.println("before change:");
System.out.println("s1 is "+s1);
System.out.println("s2 is "+s2);
System.out.println("s1 == s2 is " + (s1 == s2));
s1 = s1.replace('a','c');
System.out.println("after change:");
System.out.println("s1 is "+s1);
System.out.println("s2 is "+s2);
System.out.println("s1 == s2 is " + (s1 == s2));

程序運行的結果如下圖:

由結果可以看出:

s1能夠用賦值符號修改,此時並不會報錯。一開始,s1與s2指向同一個地址。當s1修改後,s2的內容並不會改變,s1與s2將不再指向同一個地址。此時,s1應該是重新新建了一個對象。

這裡要指出的是語句s1.replace('a','c'); 返回的是一個新的字符串並且不會更改原先字符串的內容。如果沒有單純運行s1.replace('a','c'),s1的內容並不會更改。

如果將一個已創建的String類對象用賦值符號與另一個String類對象連接時,產生的效果會不一樣,代碼如下所示:

String s1 = "abs";

String s2 = "abs";

String s3 = new String ("abs");

System.out.println("before change:");

System.out.println("s1 is "+s1);

System.out.println("s2 is "+s2);

System.out.println("s3 is "+s3);

System.out.println("s1 == s2 is " + (s1 == s2));

System.out.println("s2 == s3 is " + (s2 == s3));

s3 = s1;

System.out.println("after change:");

System.out.println("s1 is "+s1);

System.out.println("s2 is "+s2);

System.out.println("s3 is "+s3);

System.out.println("s1 == s2 is " + (s1 == s2));

System.out.println("s2 == s3 is " + (s2 == s3));

代碼運行的結果如下圖:

可以看到,原先s1和s3並不指向同一位置,但當執行s3 = s1後,s3指向s1的地址,此時s2,s3指向同一地址。按照Java的回收機制,此時原來s3所指向的地址的對象應該被回收。

Copyright © Linux教程網 All Rights Reserved