JAVA字符串
测试弱引用时,偶然发现一个问题,我们先看一段代码:
Code
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
结果:
true
false
false
true
false
也许他和你猜想一样,也许不一样.如果一样,您就没必要看下去了.
1.为什么a==b 而且 c!=d 呢?
因为字段串常量,放在常量池中,他是编译器确定. 你可以把引用理解成对像的地址,这样更容易理解,
因为字符串"anran"放在常量池中,编译器期就决定了他的虚拟地址(暂且这样叫吧)是X, 所以a==x==b===x.
那为什么c!=d呢,因为这两个对像都是运行期创建的,创建d的时候JVM并不知道已经有一个c,内容和自己一样,
所以又建了一个对像,地址当然不同了.
至于b!=c,b在常量池而C不在,地址空间必然不同,自然不相等.
2.为什么a==e而c!=e呢? 先解释一下intern方法,intern方法将一个把一个运行时创建的字符串加到字符串常量池,
如果已存在,则返回该常量的地池. c.intern()的时候,常量池已存在"anran"串,所以直接返回它的址.
所以a==e而c!=e.