国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java String 和 new String()的比較與區別

2019-11-26 12:31:44
字體:
來源:轉載
供稿:網友

Java String 和 new String()的區別

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

String str1 = "abcd"的實現過程:首先棧區創建str引用,然后在String池(獨立于棧和堆而存在,存儲不可變量)中尋找其指向的內容為"abcd"的對象,如果String池中沒有,則創建一個,然后str指向String池中的對象,如果有,則直接將str1指向"abcd"";如果后來又定義了字符串變量 str2 = "abcd",則直接將str2引用指向String池中已經存在的“abcd”,不再重新創建對象;當str1進行了賦值(str1=“abc”),則str1將不再指向"abcd",而是重新指String池中的"abc",此時如果定義String str3 = "abc",進行str1 == str3操作,返回值為true,因為他們的值一樣,地址一樣,但是如果內容為"abc"的str1進行了字符串的+連接str1 = str1+"d";此時str1指向的是在堆中新建的內容為"abcd"的對象,即此時進行str1==str2,返回值false,因為地址不一樣。

String str3 = new String("abcd")的實現過程:直接在堆中創建對象。如果后來又有String str4 = new String("abcd"),str4不會指向之前的對象,而是重新創建一個對象并指向它,所以如果此時進行str3==str4返回值是false,因為兩個對象的地址不一樣,如果是str3.equals(str4),返回true,因為內容相同。

不多說,直接上代碼:

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;進行了+連接地址不一樣

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大厂| 甘孜县| 固安县| 长宁县| 大埔县| 南康市| 新巴尔虎左旗| 嘉荫县| 武隆县| 彭水| 唐山市| 泸水县| 金坛市| 天镇县| 三亚市| 瓦房店市| 长海县| 萨嘎县| 商河县| 大石桥市| 桃江县| 金阳县| 兴义市| 八宿县| 九寨沟县| 油尖旺区| 泰来县| 隆化县| 日土县| 湘乡市| 奉新县| 忻州市| 隆德县| 慈利县| 阿克苏市| 楚雄市| 斗六市| 玛纳斯县| 琼海市| 营山县| 乐安县|