對String類的理解

String   s= "Hello ";當jvm看到 "Hello ",在string池建立string對象存儲它,並將他的引用返回給s。 
s= "Java ",當jvm看到 "Java ",在string池建立新的string對象存儲它,再把新建的string對象的引用返回給s。而原先的 "Hello "仍然在string池內。沒有消失,他是不能被修改的。 

因此咱們僅僅是改變了s的引用,而沒有改變他所引用的對象,由於string對象的值是不能被修改的。 html

String s="hello";String   s1= "Hello ";jvm首先在string池內裏面看找不找到字符串 "Hello ",找到,返回他的引用給s1,不然,建立新的string對象,放到string池裏。這裏因爲s= "Hello "了,對象已經被引用,因此依據規則s和s1都是引用同一個對象。因此   s==s1將返回true。(==,對於非基本類型,是比較兩引用是否引用內存中的同一個對象) 

String   s2=String( "Hello ");jvm首先在string池內裏面看找不找到字符串 "Hello ",找到,不作任何事情,不然,建立新的string對象,放到string池裏面。因爲遇到了new,還會在內存上(不是string池裏面)建立string對象存儲 "Hello ",並將內存上的(不是string池內的)string對象返回給s2。因此s==s2將返回false,不是引用同一個對象。 
轉自:https://www.cnblogs.com/dangzhenjiuhao/p/4585389.htmljvm