关于自动拆箱的危害--慎重自动拆箱

               先看图再解释!


是不是惊呆了,改了下数据,结果却不同了?!
Java是面向对象的语言,一般操作的都是对象,为了使操作基本类型方便,所以Java引入了包装类,基本类型到包装类的转换叫做装箱,反之为拆箱。操作又分为自动和手动,自动有危害,请看上图截图!
原因:Java整型,内存缓存-128---127的数据,当都为80时候,num2比较的时候是用的缓存中的数据80.因此运行结果相等。当都改为150的时候,所以不相等,要想150时候运行正确,改为num1.equals(num2)即可。有兴趣的可以测试150时候,当改为  num1!=num2条件依然也不成立!

再看如下代码,执行test()函数后,屏幕打印结果为()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public   class   Test2
{
     public   void   add(Byte b)
     {
         b = b++;
     }
     public   void   test()
     {
         Byte a =  127 ;
         Byte b =  127 ;
         add(++a);
         System.out.print(a +  " " );
         add(b);
         System.out.print(b +  "" );
     }
}

答案:-128 127
Byte b是封装类型,add(b);引用传递,执行了没有任何影响,add(++a);会拆箱,溢出变为-128。


个人总结学习,欢迎批评指正,改进进步!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值