整数封装类和==运算符 - 其中是指定的行为? [英] Integer wrapper class and == operator - where is behavior specified?

查看:132
本文介绍了整数封装类和==运算符 - 其中是指定的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆