課程
/后端開(kāi)發(fā)
/Java
/Java入門第三季
s3 和s4與s1和s2有和不同,為什么一個(gè)地址相同,一個(gè)不同?
2015-04-24
源自:Java入門第三季 2-2
正在回答
? 字符串存儲(chǔ)的地方有兩種,分別是
常量池
堆內(nèi)存
? 我們?cè)诔绦蛑型ǔ?huì)用以下四種方式來(lái)創(chuàng)建字符串,現(xiàn)在我分別說(shuō)說(shuō)這四種創(chuàng)建方式創(chuàng)建的字符串分別存儲(chǔ)到什么地方:
String?s?=?new?String("imooc");?? /* 存儲(chǔ)到堆中,首先會(huì)判斷池中是否有該字符串,如果有,則從池中復(fù)制一份到堆中,將堆中的地址返回引用對(duì)象;如果沒(méi)有,則在堆中創(chuàng)建一份,返回堆中的地址給引用對(duì)象。 */
String?s?=?"imooc"; /* 存儲(chǔ)到常量池中,首先判斷池中是否有該字符串,如果有,則從池中返回地址給引用對(duì)象;如果沒(méi)有,則從池中創(chuàng)建該字符串,然后返回池中的地址給引用對(duì)象。 */
String?s?=?"I?love?"?+?"imooc"; /* 存儲(chǔ)到常量池中,首先判斷池中是否有該字符串,如果有,則從池中返回地址給引用對(duì)象;如果沒(méi)有,則從池中創(chuàng)建該字符串,然后返回池中的地址給引用對(duì)象。 */
String?s1?=?"I?love"; String?s2?=?s1?+?"imooc"; /* 存儲(chǔ)到堆中,首先會(huì)判斷池中是否有該字符串,如果有,則從池中復(fù)制一份到堆中,將堆中的地址返回引用對(duì)象;如果沒(méi)有,則在堆中創(chuàng)建一份,返回堆中的地址給引用對(duì)象。 */
參考地址:Java中的String與常量池
http://blog.csdn.net/cs_lht/article/details/6742531
蒼白的沉淀
deziko 回復(fù) 蒼白的沉淀
你可以在網(wǎng)上搜一下字符串池和堆內(nèi)存,這樣便于理解
你可以這么理解
你在內(nèi)存中開(kāi)辟了一塊空間,這塊空間中存放的是"imooc",當(dāng)你定義變量的時(shí)候,就會(huì)檢測(cè)內(nèi)存中是否存在該字符串,如果存在的話直接引用就OK了,這也就是為什么s1和s2的地址一樣了。就是因?yàn)樵趧?chuàng)建s1之后,在內(nèi)存中已經(jīng)有"imooc"這個(gè)字符串了,那么再創(chuàng)建s2的時(shí)候,自動(dòng)去查內(nèi)存中是否有相同的字符串,所以他倆就相等。
而為什么s3和s4不相等呢,是因?yàn)樽址坏﹦?chuàng)建,就不會(huì)改變,也就是你在做字符串拼接的時(shí)候,會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象,也就是會(huì)另外開(kāi)辟一塊空間,用來(lái)存放所新創(chuàng)建的字符串。所以s3是一個(gè)新的地址,而s4也是一個(gè)新的地址
舉報(bào)
Java中你必須懂得常用技能,不容錯(cuò)過(guò)的精彩,快來(lái)加入吧
1 回答為什么s1與s2比較 顯示TURE s1 。 s3,s3和s4的比較結(jié)果為FALSE?
1 回答為什么我比較s3和s4的內(nèi)容是不相同的?
3 回答為什么?s1==s2是true,s3==s4是false
1 回答為什么s1 == s2是true s3==s4是false
2 回答s3和s4為什么不一樣???
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-08-31
? 字符串存儲(chǔ)的地方有兩種,分別是
常量池
堆內(nèi)存
? 我們?cè)诔绦蛑型ǔ?huì)用以下四種方式來(lái)創(chuàng)建字符串,現(xiàn)在我分別說(shuō)說(shuō)這四種創(chuàng)建方式創(chuàng)建的字符串分別存儲(chǔ)到什么地方:
參考地址:Java中的String與常量池
2015-07-03
http://blog.csdn.net/cs_lht/article/details/6742531
2015-04-24
你可以在網(wǎng)上搜一下字符串池和堆內(nèi)存,這樣便于理解
2015-04-24
你可以這么理解
你在內(nèi)存中開(kāi)辟了一塊空間,這塊空間中存放的是"imooc",當(dāng)你定義變量的時(shí)候,就會(huì)檢測(cè)內(nèi)存中是否存在該字符串,如果存在的話直接引用就OK了,這也就是為什么s1和s2的地址一樣了。就是因?yàn)樵趧?chuàng)建s1之后,在內(nèi)存中已經(jīng)有"imooc"這個(gè)字符串了,那么再創(chuàng)建s2的時(shí)候,自動(dòng)去查內(nèi)存中是否有相同的字符串,所以他倆就相等。
而為什么s3和s4不相等呢,是因?yàn)樽址坏﹦?chuàng)建,就不會(huì)改變,也就是你在做字符串拼接的時(shí)候,會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象,也就是會(huì)另外開(kāi)辟一塊空間,用來(lái)存放所新創(chuàng)建的字符串。所以s3是一個(gè)新的地址,而s4也是一個(gè)新的地址