Integer a1 = 127;
Integer b1 = 127;
if(a1==b1){
System.out.println("相等");
}else{
System.out.println("不等");
}
Integer a = 128;
Integer b = 128;
if(a==b){
System.out.println("相等");
}else{
System.out.println("不等");
}
JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer
i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。
参考这里: https://my.oschina.net/xianggao/blog/84179
本文通过两个示例探讨了Java中Integer对象在不同数值时的比较行为。解释了JVM如何维护int常量池,以及当Integer数值在-128至127范围内时自动装箱的过程,说明了为何该范围内的Integer对象可以直接使用==进行比较。
492

被折叠的 条评论
为什么被折叠?



