JAVA字符串

测试弱引用时,偶然发现一个问题,我们先看一段代码:

 

Code

结果:

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.


posted @ 2009-09-17 17:19  Christmas  阅读(125)  评论(0编辑  收藏  举报