常量池随笔

常量池保存了类, 接口, 方法等的常量数据, 也保存了String常量.

如下代码中a1, a2不是String常量(在编译期即被确定), a3则是, a1.intern()也可以获得String常量(是在运行时被装载的常量).

        String a1 = new String("a"), a2 = new String("a"), String a3 = "a";
        System.out.println(a1 == a2); //false
        System.out.println(a1.intern()
== a3); //true

String b1
= "bb", b2 = "bb", b3 = "b"+"b"; System.out.println(b1 == b2); //true
System.out.println(b1 == b3); //true

返回结果 (a1 == a2) = false, (a1.intern() == a3) = true

为什么呢? 原来a1, a2是不同的对象并且被存放在堆中, a1.intern()则返回相应值的String常量.

 (b1 == b2) = true, (b1 == b3) = true.

而b1, b2则保存在常量池中, b3是由两个String常量连接而成 其结果就是常量"bb".

 

 

posted @ 2013-01-22 17:10  D.Wang  阅读(132)  评论(0编辑  收藏  举报