Java String 和 new String()的比較與區(qū)別
Java String 和 new String()的區(qū)別
棧區(qū)存引用和基本類型,不能存對象,而堆區(qū)存對象。==是比較地址,equals()比較對象內(nèi)容。
String str1 = "abcd"的實(shí)現(xiàn)過程:首先棧區(qū)創(chuàng)建str引用,然后在String池(獨(dú)立于棧和堆而存在,存儲不可變量)中尋找其指向的內(nèi)容為"abcd"的對象,如果String池中沒有,則創(chuàng)建一個,然后str指向String池中的對象,如果有,則直接將str1指向"abcd"";如果后來又定義了字符串變量 str2 = "abcd",則直接將str2引用指向String池中已經(jīng)存在的“abcd”,不再重新創(chuàng)建對象;當(dāng)str1進(jìn)行了賦值(str1=“abc”),則str1將不再指向"abcd",而是重新指String池中的"abc",此時如果定義String str3 = "abc",進(jìn)行str1 == str3操作,返回值為true,因?yàn)樗麄兊闹狄粯?,地址一樣,但是如果?nèi)容為"abc"的str1進(jìn)行了字符串的+連接str1 = str1+"d";此時str1指向的是在堆中新建的內(nèi)容為"abcd"的對象,即此時進(jìn)行str1==str2,返回值false,因?yàn)榈刂凡灰粯印?/p>
String str3 = new String("abcd")的實(shí)現(xiàn)過程:直接在堆中創(chuàng)建對象。如果后來又有String str4 = new String("abcd"),str4不會指向之前的對象,而是重新創(chuàng)建一個對象并指向它,所以如果此時進(jìn)行str3==str4返回值是false,因?yàn)閮蓚€對象的地址不一樣,如果是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)文章
MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復(fù)的操作方法
這篇文章主要介紹了MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復(fù)的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
基于Java編寫一個PDF與Word文件轉(zhuǎn)換工具
前段時間一直使用到word文檔轉(zhuǎn)pdf或者pdf轉(zhuǎn)word,尋思著用Java應(yīng)該是可以實(shí)現(xiàn)的,于是花了點(diǎn)時間寫了個文件轉(zhuǎn)換工具,感興趣的可以了解一下2023-01-01
創(chuàng)建并運(yùn)行一個java線程方法介紹
這篇文章主要介紹了創(chuàng)建并運(yùn)行一個java線程,涉及線程代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-11-11
java反射機(jī)制給實(shí)體類相同字段自動賦值實(shí)例
這篇文章主要介紹了java反射機(jī)制給實(shí)體類相同字段自動賦值實(shí)例,具有2020-08-08
Springboot添加jvm監(jiān)控實(shí)現(xiàn)數(shù)據(jù)可視化
這篇文章主要介紹了Springboot添加jvm監(jiān)控實(shí)現(xiàn)數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
gradle配置國內(nèi)鏡像的實(shí)現(xiàn)
這篇文章主要介紹了gradle配置國內(nèi)鏡像的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

