java常量池

来源:互联网 发布:肌肉发力原理知乎 编辑:程序博客网 时间:2024/06/07 02:45
public class Main{public static void main(String[] args){Integer a = 107;Integer b = 107;System.out.println(a==b);Integer x  = 108;Integer y = 108;System.out.println(x==y);}}

这个输出结果是

true

false

原因就是因为java中有个叫做常量池的东西。每个包装类都有常量池,Integer的常量池范围为-108~107,所以如果是在这个范围内地址就是常量池中的地址,所以相等。如果不在这个范围内就会new新的对象,所以地址就会不一样。

另外还有

public class foo {public static void main(String[] args){String a = "aaa";String b = "aaa";String c = new String("aaa");System.out.println(a==b);System.out.println(a==c);}}

这个输出结果也是

true

false

关于String类型的常量池:http://www.cnblogs.com/wanlipeng/archive/2010/10/21/1857513.html


0 0