//   在C#与java中,
              byte b=100;
            b=b+100;     
      编译通不过(类型转换造成),而              byte b=100; 
            b+=100;
      能编译通过,
   能否给出详细解释。
   
还请高手赐教。

解决方案 »

  1.   

    b+=100就相当于b = (byte)(b+100)
    我知道这等于没说
    还是等高手赐教。
      

  2.   

    这类题目,反编译一下就可以找到答案了对下面的类进行反编译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:   returnpublic 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)
      

  3.   

    楼上正确,右侧有无小数点数字的运算,都会被提升为int类型
      

  4.   

    不好意思,楼上的两位大哥,小弟皮肤太好,人称··小白…… 
    反编译,我一点也不明白,能给稍微讲1下吗 ?
        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 
    这是什么语言?我不懂
      

  5.   

    这个是为了能够在不同的系统上移植,JAVA自定义的一套代码啦
      

  6.   

    有个叫作《JAVA虚拟机规范》的书可以看一下吧