关于intern的有意思的一个小题目 ->之前知识回顾
jdk环境:1.8
首先讲讲intern()方法
1.7之前,会先去方法区内的常量池寻找,如果没有则创建,并返回指针
1.7之后(包括1.7),不会再存储两份,找不到的话会返回堆中引用
那我们应该就能猜到了,第一个输出为false的原因是因为常量池内初始化了"java"这个字符串,所以两个引用指向不同,为false
第二个输出为true是因为指针的引用是相同的,都在堆内存
写个代码证实我们的想法:
String 字面量赋值的方式会存储到字符串常量池,所以可以直接用这个在比较地址之前,初始化一个字符串
最后结果就是false,因为intern方法在常量池内找到了这个字符串,引用指向了他,而s1变量则指向堆内存