标题: 关于java中byte类型的疑问 [打印本页] 作者: 段光宇 时间: 2013-11-14 22:54 标题: 关于java中byte类型的疑问 以下代码哪个是正确的?为什么?
a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;
d. byte b = 1; b = ++b;
关于这个问题我实验了一下,b是肯定错的,我的解释是因为“byte b = 1; b = b + 1; ”语句相当于“[byte] b = [byte] b + [int] 1”语句,b自动转型为int与1做加法,结果是int类型,把int类型赋给byte类型b,所以错误。
而a,c,d都可以运行没有报错,但是我又不能解释这三个为什么正确,求大神为小弟答疑解惑。作者: 段光宇 时间: 2013-11-14 23:12
a选项也可以解释通了,b为byte,结果值为2,正确。就是c和d怎么解释呢?
求大神!翻了好多书了!作者: FFF 时间: 2013-11-14 23:14 本帖最后由 FFF 于 2013-11-14 23:16 编辑
/**
* 以下代码哪个是正确的?为什么?
*a. byte b = 1 + 1;
*b. byte b = 1; b = b + 1;
*c. byte b = 1; b = b += 1;
*d. byte b = 1; b = ++b;
*
* @autho
*/
public static void main(String args[]){
//编译通过。等价于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;
}
复制代码
作者: Sasson 时间: 2013-11-14 23:21
a. byte b = 1 + 1; //这个是两个常量相加,
jvm虚拟界对常量有优化机制,2没有超过byte的取之范围,就不会报错
b. byte b = 1; b = b + 1;
这个你说对了
c. byte b = 1; b = b += 1;
这个选项是因为b+=1就是b=(byte)(b+1)