为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 349 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号