JAVA中的天大祕密,String真的是不可變的嗎?

我覺得如果別人問這個問題的話,回答不可變就可以了。 下面只是給大家看兩個有代表性的例子:

1) String不可變但不代表引用不可以變

String str = "Hello";

str = str + " World";

System.out.println("str=" + str);

結果:str=Hello World

解析:

實際上,原來String的內容是不變的,只是str由原來指向"Hello"的內存地址轉為指向"Hello World"的內存地址而已,也就是說多開闢了一塊內存區域給"Hello World"字符串。

2) 通過反射是可以修改所謂的“不可變”對象


JAVA中的天大秘密,String真的是不可變的嗎?

結果:

s = Hello World

s = Hello_World

解析:

用反射可以訪問私有成員, 然後反射出String對象中的value屬性, 進而改變通過獲得的value引用改變數組的結構。但是一般我們不會這麼做,這裡只是簡單提一下有這個東西。


分享到:


相關文章: