java int 127_Integer类型中奇怪的"127"和"128"

原标题:Integer类型中奇怪的"127"和"128"

今天给大家带来的是Java中Integer类型的自动装箱

自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

Java自动装箱的优点:对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象(地址),不需要再创建一个新的Integer对象,否则创建新的Integer对象

Java自动装箱的缺点:因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作

下面来看几组特殊的例子

dcda21e6890226af9e958bdbefa8e2a7.png

publicclassText{

publicstaticvoidmain(String[]args){

//true

Integer a1 =127,b1 =127;

System.out.println(a1==b1);

//false

Integer a2 =newInteger(127);

Integer b2 =newInteger(127);

System.out.println(a2 ==b2);

//false

Integer a3=128,b3 =128;

System.out.println(a3==b3);

//true

Integer a4=128,b4 =128;

System.out.println(a4.equals(b4));

}

}

输出结果

true

false

false

true

第一个使用"=="判断 Integer a1 = 127 和 Integer b1 = 127

相等原因:Integer的取值范围是-128~127

第二个使用"=="判断Integer a2 = new Integer(127) 和 Integer b2 = new Integer(127)

不相等原因:装箱时,java为了提高效率,IntegerCache类中有一个数组将-128<=i<=127范围之内的数据打包成缓存里的Integer对象了,因此不用new,这个区间里的值用直接=赋值方法得到的变量地址就是同一个,而超出这个范围的数值就会new一个Integer对象出来

第三个使用"=="判断Integer a3=128 和 Integer b3 = 128

不相等原因:因为Integer类型赋值范围在-128---127之间,超出这个范围的数值就会重新new一个Integer对象出来,直接用==去比较是比较a3和b3的地址,a3和b3的地址是不相等的

第四个使用使用"=="equals()方法判断Integer a4=128 和 Integerb4 = 128

相等原因:使用equals()方法比较的是a4和b4的数值

注意点:"=="可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的equals方法。

感恩有你

您看此文用

责任编辑:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值