對於String類中的"abc"與new String("abc")的一些理解

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/wq1134302142/article/details/52177680

string類:

string類是引用是數據類型,但是在使用之前也要進行初始化,.

|--String中有很多方法:獲取字符,字符串與字符數組之間的轉換,以及獲得子串,將字符串變成大寫或者小寫等等


String s1 ="abc";
String s2 = new String("abc");
對於這個問題,我想網上的說法應該是一大堆吧,這裏涉及到了一個常量池的概念,String Pool.這個是幹嘛的呢?
據我個人理解,是用來存儲對象的,當再次去創建對象的時候,可以直接去常量池中匹配,如果有了所要創建的對象,那在常量池中就不會再分配內存了,直接兩個對象共用一個地址值,
s1 是一個引用,"abc"是在常量池中的一個對象,我說了,如果常量池中沒有,就會創建一個,也就是"abc"在常量池中會分配一段空間然後呢有一個地址值,這個地址值指向這個引用s1;
s2就不一樣了,不一樣體現在哪裏呢?
我們來看一下,關鍵字new是用來幹什麼的,--->是不是用來創建對象用的.那麼括號裏的"abc"又是什麼呢?---->是不是在常量池中的對象啊,
 那好,我們來看一下:new 操作應該是在heap中創建對象,"abc"應該去常量池匹配對象,然後再將內容值傳遞給堆內存中的對象,而現在呢,堆內存中創建好了對象,此時產生一個地址值,這個地址值是指向s2的

由此可見 
我們做如下操作判斷一下真假:
sop(s1==s2);//false
sop(s1.equals(s2));//true

再說一下equals方法,其實呢,這個方法是複寫了Object中的equals方法,因爲equals方法是調用==方法的,當不用比較地址值的時候,只需要比較對象的內容值即可.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章