在复习Java基础时看到这样一个问题:
public static void main(String[] args) {
Integer a = 800;
Integer b = 800;
System.out.println((a == b) +" "+ a.hashCode()+" "+b.hashCode());
Integer c = new Integer(8);
Integer d = new Integer(8);
System.out.println((c == d) +" "+ c.hashCode()+" "+d.hashCode());
Integer e = 8;
Integer f = 8;
System.out.println((e == f) +" "+ e.hashCode()+" "+f.hashCode());
}
问上述代码的输出情况。
这种问题一下就暴露出了自己基础薄弱的问题。这道题在IDEA上运行的结果是:
false 800 800
false 8 8
true 8 8
通过资料查阅,其原因基本可以概括为:
JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内&