分别判断下面的段代码,能否通过编译,为什么?int x = 2; byte b = 8; x = x + b;int x = 2; byte b = 200; x = x + b;int x = 2; byte b = 8; b = x + b;byte b = 2; b = b + 8;byte b = 2; b = (byte) (b + 8);byte b = 2; b = 2 + 8;byte b = 2; b = 2 + 128;byte b = 2; byte b1 = 3; byte b2 = 8; b = b1 + b2;int b = 2; byte b1 = 3; byte b2 = 8; b = b1 + b2;int b = 2; int b1 = 3; int b2 = 8; b = b1 + b2;int b = 2; int b1 = 3; int b2 = Integer.MAX_VALUE; b = b1 + b2;byte b = 2; b += 8;byte b = 2; b = b + 8;
解决方案 »
- 高手求助:如何跳出socket循环
- EMF Build2.2.0和 GEF Build 3.2
- 大家看看这样的算法!
- 怎样把填写的内容,提交到数据库
- 想试JAVA访问ODBC数据库,这么简单的一句都不能运行通过,请邦俺看看
- 帮我指点一下迷津吧!
- 请问用RandomAccessFile类的readline()方法读取一个文本文件的一行后,里面有中文,所以得到的字符串就成了乱码?请问怎么转换啊?
- 关于TABLE单元格的TOOLTIP功能
- 请问,怎样将字符串转换成为数组
- 在Linux下Weblogic问题
- 通过继承Thread类实现线程与实现Runnable接口实现线程有什么区别
- 新手求解怎么解决下面这个异常啊
b + 8; 结果是int,在赋值给b就错了
首先运算的是b+8,因为8为int型,所以结果运算出来的是10,会自动类型提升为int型,而现在把一个int型的10,赋给一个byte类型的变量,这时候如果不强制类型转换,就会报错了,因此编译不能通过。
而b+=8,这和b+8不一样,“+=”在Java里是一种运算符,所以他不需要经过刚刚上面的类型转换,会自己内部运算出来一个byte类型的10,因此不会报错。楼主,懂了么?
也就是说
byte b = 2; b += 8;
等价于 byte b = 2; b = (byte)b + 8;
会自动转换成表达式左侧的变量类型~
第二个可以,相当于 b =b+(int) 8;
是不是b=(byte)(b+8)?是b=(byte)(b+(byte)8)
是不是b=(byte)(b+8)?对
是不是b=(byte)(b+8)?是b=(byte)(b+(byte)8)将8转成byte有何意义?
x += 4.6;
and results in x having the value 7 because it is equivalent to:short x = 3;
x = (short)(x + 4.6);
摘自stackoverflow
b+=8;等价于b=(byte)(b+8);