日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...

發布時間:2023/12/10 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是以前剛學Java那會經常被問到的問題,并且也會經常出現在面試中。這個問題不僅僅只局限于Java,可以適用于其他大部分語言,正好最近有個小朋友在學編程,特此整理一下。

String s1 = "abc" ;

String s2 = new String("abc");

首先,我們先看看以上兩句分別做了什么?

String s1 = "abc" 做了什么

在棧中創建了一個名為 s1 的變量(引用)

如果 String池 中沒有 "abc" 存在,則在常量池中創建一個 String 類型的 "abc" 對象,有就不創建

將 "abc" 的地址賦給 s1

所以,此句到底創建了幾個對象,根據 "abc" 的情況而定,"abc" 之前存在就是一個,否則就沒有創建。

String s2 = new String("abc") 做了什么

創建了一個名為 s2 的變量(引用)

如果 String池 中沒有 "abc" 存在,則在 String池 中創建一個 String 類型的 "abc" ,有就不創建

使用 new關鍵字 在堆中創建了一個 String 對象

將用 new 創建的 String 對象的地址賦給 s2

所以,此句到底創建了幾個對象,根據 "abc" 的情況而定,"abc" 之前存在就是1個,不存在就是2個。

棧:存放基本類型的數據和對象的引用,但對象本身不存放在棧中,而是存放在堆中

堆:存放用 new 產生的數據

s1 == s2 與 s1.equals(s2)

s1 與 s2 看著都是內容為 "abc" 的字符串,但是使用 == 和 equals() 來判斷它們是否相等時會發現,結果并不一樣。

s1 == s2

結果為false,根據上述內容我們可以知道,兩者雖然內容一致,但是其實兩者的指向的內存地址并不一致,而 == 會檢查兩者的內存地址是否一致,一致為true,不一致為false

s1.equals(s2)

結果為true,因為 equals() 在檢查地址不相等后,還會檢查兩者的內容,兩者內容相等,則仍然返回true,毫無疑問,兩者的內容是一致的。

關于 String s3 = "abc" + "xyz";

還有一個與上述問題類似的問題,就是 String s3 = "abc" + "xyz"; 到底創建了幾個對象?

關于 "abc" 與 "xyz" 在上述中已經提到,如果之前存在就不用創建,不存在則創建。我們更需要關心的是這兩個字符串的拼接。

使用 "+" 拼接字符串,實際是創建了一個新字符串 "abcxyz"(使用 + 號,會在底層做 new StringBuilder().append("abc").append("xyz") 操作),所以至少會創建一個對象,如果 "abc" 與 "xyz" 之前都不存在,則就是創建3個對象,如果兩個中只有一個存在,則是2個。

關于 = 符號的小拓展

對于 "=" 我們并不陌生,但是編程語言中的 "=" 我們不能單純的當做數學中的等號,我們更習慣理解為賦值號,主要賦值的東西是內存地址,而不是內容本身。

我們可以這樣粗暴的理解:當一個對象被創建出來時,它可以簡單的分成兩部份,地址與內容。當我們使用a = 對象時,a 得到的并不是對象的內容,而是對象的地址,在我們操作 a 的時候,程序會通過 a(即對象的地址)來在內存中找到對象所表示的內容,并對其操作。

下面,我們來看一個小例子:

String a = "xyz";

String b = a;

System.out.println(" a = " + a);

System.out.println(" b = " + b);

a = "qwe";

System.out.println(" a = " + a);

System.out.println(" b = " + b);

打印結果:

a = xyz

b = xyz

a = qwe

b = xyz

那么在這過程中發生了什么?

a 獲取了 "xyz" 的內存地址

a 將 "xyz" 的內存地址給了 b,此時 a 與 b的內存地址都是指向 "xyz"

"qwe" 將它的地址賦給了 a,此時 a 的地址就指向 "qwe",但是 b 仍然指向 "xyz",所以 b 打印出來的值為 xyz。

推薦文章

總結

以上是生活随笔為你收集整理的java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美美女性视频 | 国产肥熟 | 成人3d动漫在线观看 | 一级全黄裸体免费视频 | 在线观看av免费 | 97国产在线 | 操操操操操操 | 王者后宫yin肉h文催眠 | 北条麻妃一区二区三区在线观看 | 国产午夜无码视频在线观看 | 国产主播在线看 | 免费一级suv好看的国产网站 | 中文字幕精品一区二 | a级无毛片 | 69国产精品视频 | www.午夜| 国产欧美综合一区二区三区 | 久久合| 法国少妇愉情理伦片 | 国产91热爆ts人妖系列 | 国产电影一区在线观看 | 思思99re| 亚洲最大的成人网 | 亚洲丝袜中文字幕 | a级在线播放| 奇米色777 | 精品av一区二区 | 国产精品丝袜黑色高跟鞋 | 美女久久久久 | 黄色一级片毛片 | 欧美视频黄 | 黄色av电影网站 | 欧美一区二区视频 | 成人性做爰片免费视频 | 色原网 | 96av视频| av一区二区三区在线观看 | 狠狠干综合网 | 国产女教师一区二区三区 | 国产69精品久久久久久久久久 | 亚洲第一视频网 | 男女作爱网站 | 宅男视频在线免费观看 | 欧美三级韩国三级日本三斤在线观看 | 精品人妻在线播放 | 3p视频在线观看 | 污网站在线观看免费 | 久久精品视频在线观看 | 黄色网址av | 久久人人爽人人爽人人片 | 牛人盗摄一区二区三区视频 | 中文字幕乱码在线 | 99香蕉视频 | 国产精品无码久久久久成人app | 亚洲精品在线视频观看 | 伊人焦久影院 | 3d动漫精品啪啪一区二区竹菊 | 粉色视频网站 | 欧美乱欲视频 | av电影在线观看网址 | 毛片日韩 | 91视频首页 | 欧美日本一区二区三区 | ass东方小嫩模pics | 澳门av在线 | 熟女高潮一区二区三区视频 | 精品视频亚洲 | 后进极品美女圆润翘臀 | 亚洲成人精品网 | 欧美另类激情 | 免费欧美在线 | 亚洲一区二区在线观看视频 | 国产欧美久久久精品免费 | 午夜免费福利视频 | 尤果网福利视频在线观看 | 午夜男人天堂 | 黑森林av凹凸导航 | 一级特黄av| 色综合久久88色综合天天免费 | 日本做爰全过程免费看 | 四虎库 | 亚洲av永久无码精品三区在线 | 爱情岛论坛亚洲自拍 | 尤物视频在线看 | 国产区一区二 | 国产一区二区三区日韩 | 日韩精品中字 | 亚洲欧美综合网 | 久久狠| 日韩成人一区二区视频 | 日韩av网页 | 久久99一区二区 | 少妇无码一区二区三区免费 | 免费久久久久久 | 成人自拍视频在线观看 | 亚洲精品在线免费 | 久久久久久久久久久久 | 九九色九九 | 99久久毛片 |