在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