我們用下面一組圖來說明Java的不變性。
1.聲明一個字符串
~~~
String s = "abcd";
~~~
s存儲了字符串對象的引用。下面圖片中的箭頭就表示這種存儲引用。

2.將一個字符串變量賦值給另外一個字符串變量
~~~
String s2 = s;
~~~
s2變量存儲了同樣的引用值。所以,兩個變量指向同一個字符串對象。

3.合并字符串
~~~
s = s.concat("ef");
~~~
s現在存儲的是新生成的字符串對象的引用。

4.總結
一旦一個字符串在內存(堆)上創建,這個字符串就不會改變。我們應該注意到String類的所有方法都不會改變字符串本身,而是返回一個新的字符串。
如果我們需要一個可以改變的字符串,我們可以使用StringBuffer或者StringBuilder。否則,因為每次都是創建一個新的字符串。
原文鏈接:[Diagram to show Java String’s Immutability](http://www.programcreek.com/2009/02/diagram-to-show-java-strings-immutability/)
譯文鏈接:[[圖說Java]圖說字符串的不變性](http://blog.csdn.net/sunnyyoona/article/details/50410801)
- 前言
- [Hibernate開發之路](1)Hibernate配置
- [Hibernate開發之路](2)Hibernate問題
- [Hibernate開發之路](3)基礎配置
- [Hibernate開發之路](4)ID生成策略
- [Hibernate開發之路](5)聯合主鍵
- [設計模式實踐之路](1)單例模式
- [Java]UDP通信的簡單例子
- [Java]套接字地址InetAddress講解
- [Java開發之路](1)final關鍵字
- [Java開發之路](2)Java字符串
- [Java開發之路](3)Java常用類
- [Java開發之路](4)String、StringBuffer與StringBuilder詳解
- [Java開發之路](5)異常詳解
- [Java開發之路](6)File類的使用
- [Java開發之路](7)RandomAccessFile類詳解
- [Java開發之路](8)輸入流和輸出流
- [Java開發之路](9)對象序列化與反序列化
- [Java開發之路](10)DOM解析XML文檔
- [Java開發之路](11)SAX解析XML文檔
- [Java開發之路](12)JDOM和DOM4J解析XML文檔
- [Java開發之路](14)反射機制
- [Java開發之路](15)注解
- [Java開發之路](16)學習log4j日志
- [Java開發之路](18)關于Class.getResource和ClassLoader.getResource的路徑問題
- [Java開發之路](19)Long緩存問題
- [Java開發之路](20)try-with-resource 異常聲明
- [Java開發之路](21)Comparator與Comparable
- [Java]Java工程師成神之路
- [細說Java](1)圖說字符串的不變性
- [細說Java](2)Java中字符串為什么是不可變的
- [細說Java](3)創建字符串是使用" "還是構造函數?