整数封装类和==运算符 - 其中是指定的行为? [英] Integer wrapper class and == operator - where is behavior specified?
本文介绍了整数封装类和==运算符 - 其中是指定的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2); // true
integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2); // false
它在 -128 - 127
的范围内返回==(如果是),为什么会有这样的规范?
解决方案
由于 Integer.valueOf(int)
:
public static Integer valueOf(int i){
if(i> = -128&& i< = IntegerCache.high)
return IntegerCache.cache [i + 128]
else
return new Integer(i);
}
说明: b
整数integer1 = 127
是的整数integer1 = Integer.valueOf(127)
,对于介于-128和127(含)之间的值,整数被放入缓存并返回多次,而较高和较低的数字每次都会生成新的整数。
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true
integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false
I found it returns == (if it is) under the range of -128 - 127
, why is there such specification ?
解决方案
Because of this code in Integer.valueOf(int)
:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
Explanation:
Integer integer1 = 127
is a shortcut for Integer integer1 = Integer.valueOf(127)
, and for values between -128 and 127 (inclusive), the Integers are put in a cache and returned multiple times, while higher and lower numbers generate new Integers each time.
这篇关于整数封装类和==运算符 - 其中是指定的行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文