亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

關于java字符串的問題

關于java字符串的問題

大話西游666 2021-06-22 17:51:38
(真或假)假設字符串對象 b 和 c 包含相同的字符序列。那么 b == c 是真的。public static void main(String[] args) {    String a = "abc";    String b = "abc";    System.out.println(a == b);    System.out.println(a.equals(b));}結果是真的,但問題的答案是假的。我想知道為什么。
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

public static void main(String[] args) {

    String a = new String("abc");

    String b = new String("abc");


    System.out.println(a.equals(b));

    System.out.println(a == b);

}

打印true,然后false。因此,具有相同字符序列的兩個字符串確實必須equal彼此關聯,但可以彼此關聯,也可以不==關聯。


顯然,a == a在所有情況下, anda是String包含與a.


但是在上面的示例中,我們創建了兩個不同的實例,它們恰好包含相同的字符序列。因此a != b。


那么在你的例子中發生了什么?字符串實習。


任何字符串文字都由編譯器分配在一個特殊的池中,并且任何重復的文字共享相同的引用。所以即使文字被定義了兩次,就編譯器而言,它們是同一個實例。


查看完整回答
反對 回復 2021-06-30
?
MM們

TA貢獻1886條經驗 獲得超2個贊

您的測試結果為 true 的原因是 JVM 喜歡做的一件非常奇怪的事情。因為您已經定義了兩個字面String量,JVM 將決定存儲這些值之一,并且讓 a 和 b 引用同一個字符串。這就是為什么進行==比較會導致true.

正如其他人所說,這樣做String b = new String("abc");將強制創建一個新的String文字,這將是一個單獨的內存塊。因此==比較將導致false。


查看完整回答
反對 回復 2021-06-30
  • 2 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號