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

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

Java中String.intern方法一個怪異的問題

Java中String.intern方法一個怪異的問題

慕工程0101907 2019-01-17 14:31:46
最近在研究一些基礎知識,看到Java中的常量池及String.intern方法,也在網上找了一些示例代碼在自己機器上運行,但是發現一個奇怪的問題,如下代碼: // #0 String str1 = new String("0") + new String("0"); str1.intern(); String str2 = "00"; System.out.println(str1 == str2); // true System.out.println(str1.equals(str2)); // true // #1 String str1 = new String("1") + new String("1"); str1.intern(); String str2 = "11"; // 不知道為什么不是指向同一個引用 System.out.println(str1 == str2); // false, // 兩個變量的hashCode也是相等的 System.out.println(str1.hashCode() == str2.hashCode()); // true System.out.println(str1.equals(str2)); // true // #2 String str1 = new String("2") + new String("2"); str1.intern(); String str2 = "22"; System.out.println(str1 == str2); // true System.out.println(str1.equals(str2)); // true 搞不明白為什么兩個new String("1") + new String("1")相加之后的變量intern的時候,再定義一個一樣的string就不會指向StringPool中的地址! 上述代碼#1更改為如下寫法: // #1-Update String str1 = (new String("1") + new String("1")).intern(); String str2 = "11"; System.out.println(str1 == str2); // true System.out.println(str1.equals(str2)); // true 又能在StringPool中找到相應的引用,怪事一樁,請各位大俠指點迷津?。?!
查看完整描述

1 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

我在自己的機器上測試 #1 情況都是 true

查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 299 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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