String字符串性能优化的几种方案(18)

2.s.intern() , 在字符串常量池里已经存在“ab”便不再创建存放副本“ab\";

3.s2=\"ab\" , s2指向的是字符串常量池里”ab\" , 而s1指向的堆中的”ab\" , 故两者不相等 。

该示意图如下:

执行第二部分:

1.两个new出来相加的“abcd”存放在堆中 , s3指向堆中的“abcd\";

2.执行s3.intern() , 在将“abcd\"副本的存放到字符串常量池时 , 发现常量池里没有该”abcd\" , 因此 , 成功存放;

3.s4=\"abcd\"指向的是字符串常量池里已有的“abcd\"副本 , 而s3指向的是堆中的\"abcd\" , 副本\"abcd\"的地址和堆中“abcd\"地址不相同 , 故为false;

1.7版本

false true

执行第一部分:这一部分与jdk1.6基本类似 , 不同在于 , s1.intern()返回的是引用 , 而不是副本 。

推荐阅读