第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于字符串的不變性

關于字符串的不變性

qq_不睡覺的怪叔叔_0 2016-07-15 23:07:22
在這個代碼中,為什么hobby等于hobby2而不等于hobby3呢?
查看完整描述

3 回答

已采納
?
冰山點水

TA貢獻109條經(jīng)驗 獲得超149個贊

第一句代碼里面的字符串字面量“play basketball”會作為常量存放在常量池中,當執(zhí)行第二句代碼的時候,JVM發(fā)現(xiàn)常量池中有這個字面量,就會直接把引用指向常量池中的這個“play basketball”,也就是兩個變量指向同一個內(nèi)存地址。當執(zhí)行第三句代碼的時候,因為有一個new,不管常量池有沒有這個play basketball,都會在堆里面開辟一個新的內(nèi)存空間存放play basketball,并將hobby3指向這個內(nèi)存地址,所以hobby==hobby3的結果是false。

查看完整回答
2 反對 回復 2016-07-15
?
看風景非凡

TA貢獻9條經(jīng)驗 獲得超11個贊

這個不等于是因為在String類中,“==”比較的是他們在內(nèi)存中的存放地址,你new了一個對象,結果肯定是false,前面兩個雖然變量名不一樣,但是他們在內(nèi)存中都指向“Play basketball”,即他們的內(nèi)存地址是一樣的,如果這里你把“==”換成“equals”,結果就是true,因為在String類中,equals比較是他們的值是否相同。(只有在基本數(shù)據(jù)類型之間的比較中“==”才比較的是他們的值,例如int,double等等,在復合數(shù)據(jù)類型,即類中,他比較的是內(nèi)存地址)

查看完整回答
1 反對 回復 2016-07-15
?
y_play

TA貢獻3條經(jīng)驗 獲得超0個贊

這是因為JVM中有個常量池的概念,它的機制大致就是如果常量池里面有對應的字符串,就不用開辟新的內(nèi)存空間來創(chuàng)建字符串,如果沒有就開辟內(nèi)存空間來創(chuàng)建你生命的字符串;且用new關鍵字會強行在內(nèi)存里面開辟空間,不管常量池中是否有與你需要的字符串。

比如String hobby="Play basketball"這句之后,說明常量池有了"Play basketball"的字符串,而hobby2的 指向/引用 也是常量池中的它,通過==判斷的引用,那么hobby和hobby2都是相同的引用,返回true;而hobby3使用了new關鍵字,會強行開辟內(nèi)存空間,所以他的 指向/引用 和hobby、hobby2都是不一樣的所以是false。

查看完整回答
反對 回復 2016-07-17
  • 3 回答
  • 0 關注
  • 1510 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號