关于+=的解决

            在C#与java中, 
                        byte   b=100;
                        b=b+100;          
            编译通不过(类型转换造成),而 

                        byte   b=100;  
                        b+=100;
            能编译通过。

今天有了具体解释(由zapdos 大哥提供):

这类题目,反编译一下就可以找到答案了

对下面的类进行反编译

public   class   test{
public   static   void   main(String   args[]){
byte   a   =   30;
a   +=40;
int   b   =   20;
b   =   b+41;
}
}

得到

C:/java> javap   -c   test
Compiled   from   "test.java"
public   class   test   extends   java.lang.Object{
public   test();
    Code:
      0:       aload_0
      1:       invokespecial       #1;   //Method   java/lang/Object." <init> ":()V
      4:       return

public   static   void   main(java.lang.String[]);
    Code:
      0:       bipush     30
      2:       istore_1
      3:       iload_1
      4:       bipush     40
      6:       iadd
      7:       i2b
      8:       istore_1
      9:       bipush     20
      11:     istore_2
      12:     iload_2
      13:     bipush     41
      15:     iadd
      16:     istore_2
      17:     return

}

由此可得出结论:
b=b+100;     中,由于b+100后值已提升为int型,再赋给byte型当然不行
b+=100;   中,由反编译结果可以看出b+=100相当于b=(byte)(b+100)

//END
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值