public void Test(){
Integer a=128;
Integer b=128;
Integer c=100;
Integer d=100;
System.out.println(a==b);
System.out.println(c==d);
}
记录一下平时学习中遇到的坑
相信很多人都不知道上述代码打印的结果是
false
true
Process finished with exit code 0
解释原因
直接使用Integer包装类赋值,范围在[-128,127](闭区间)之间不会生成新的对象,查看Integer的源码中可以看到调用的是Integer.ValueOF()方法,就相当于直接int赋值,直接把Java常量池中的对象拿来用,超过了范围就会申请在堆中new一个对象,然后双等于就是比较两者的内存地址是否一样