溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中的String 與 new String()有什么不同的地方

發(fā)布時(shí)間:2020-11-17 16:13:10 來源:億速云 閱讀:171 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中的String 與 new String()有什么不同的地方,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

Java String 和 new String()的區(qū)別

棧區(qū)存引用和基本類型,不能存對(duì)象,而堆區(qū)存對(duì)象。==是比較地址,equals()比較對(duì)象內(nèi)容。

String str1 = "abcd"的實(shí)現(xiàn)過程:首先棧區(qū)創(chuàng)建str引用,然后在String池(獨(dú)立于棧和堆而存在,存儲(chǔ)不可變量)中尋找其指向的內(nèi)容為"abcd"的對(duì)象,如果String池中沒有,則創(chuàng)建一個(gè),然后str指向String池中的對(duì)象,如果有,則直接將str1指向"abcd"";如果后來又定義了字符串變量 str2 = "abcd",則直接將str2引用指向String池中已經(jīng)存在的“abcd”,不再重新創(chuàng)建對(duì)象;當(dāng)str1進(jìn)行了賦值(str1=“abc”),則str1將不再指向"abcd",而是重新指String池中的"abc",此時(shí)如果定義String str3 = "abc",進(jìn)行str1 == str3操作,返回值為true,因?yàn)樗麄兊闹狄粯樱刂芬粯?,但是如果?nèi)容為"abc"的str1進(jìn)行了字符串的+連接str1 = str1+"d";此時(shí)str1指向的是在堆中新建的內(nèi)容為"abcd"的對(duì)象,即此時(shí)進(jìn)行str1==str2,返回值false,因?yàn)榈刂凡灰粯印?/p>

String str3 = new String("abcd")的實(shí)現(xiàn)過程:直接在堆中創(chuàng)建對(duì)象。如果后來又有String str4 = new String("abcd"),str4不會(huì)指向之前的對(duì)象,而是重新創(chuàng)建一個(gè)對(duì)象并指向它,所以如果此時(shí)進(jìn)行str3==str4返回值是false,因?yàn)閮蓚€(gè)對(duì)象的地址不一樣,如果是str3.equals(str4),返回true,因?yàn)閮?nèi)容相同。

不多說,直接上代碼:

String str1 = "abcd";
String str2 = "abcd";
String str3 = new String("abcd");
String str4 = new String("abcd");
System.out.println(str1==str2);//true地址一樣
System.out.println(str3==str4);//false,但地址不一樣
System.out.println(str3.equals(str3));//true,值一樣
System.out.println(str2.equals(str3));//true,值一樣
System.out.println((str1+"a")==(str2+"a"));//false;進(jìn)行了+連接地址不一樣

關(guān)于Java中的String 與 new String()有什么不同的地方就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI