本帖最后由 FFF 于 2013-11-6 12:27 编辑
- b = (byte)(b+3); //可以
- b= b +(byte)(3) ; //不可以
复制代码 是因为 b= b +(byte)(3) 的时候,Jvm不知道你的=号后面的那个b的值。他是变量,编译器编译时并不会知道b具体是多少(编译时不会赋值,所以不知道b是多少),所以JVM会认为b是所有可能的值。所以不能通过。
附:byte题目一道:- //编译通过。等价于byte = 2;因为右边是常量,其值固定,若在byte型的范围内,编译器会自动完成强制转换;若不在范围内,则编译失败。
- byte b = 1 + 1;
-
- //编译失败。b是变量,编译器编译时并不会知道b具体是多少(编译时不会赋值,所以不知道b是多少),所以会认为b是所有可能的值,
- //因此b+1不能通过编译。正确为: b = (byte) (b + 1);
- //byte b = 1;
- // b= b + 1;
-
- //编译通过。+=是一个赋值运算符,加和赋值是一步完成的,含有强制类型转换。等价于b = b = (byte)(b+1);
- //byte b = 1;
- //b = b += 1;
-
- //编译通过。++是自增运算符,自身加1再赋值给自己,加1和赋值也是一步完成的,且不会改变变量的类型(含有强制类型转换)。
- // byte b = 1;
- // b = ++b;
复制代码 |