Java类型提升的问题
byte b=5;
b =b +2;//错误
为什么 b+=2;可以?
------解决方案--------------------相似的问题,看看:
http://topic.csdn.net/u/20120531/20/f15cd160-6940-4f7f-8290-b86244461cbc.html?38016
------解决方案--------------------
byte b=5;
b =b +2;//错误
为什么 b+=2;可以?
b = b + 2;
byte,short,char类型的数在运算时会自动地转成int类型的,和2相加得到7(int),将其赋值给(byte)b时不能自动向下转换,抱错。
b += 2;
会做默认处理,他会将运算右数的第九位作为符号位(byte最多只有8位),第九位以上的会被自动截掉。
byte a = 1; // 0000 0001
a += 127; // 1111 1111
// 10000 0000 (-128)
byte a = 1; // 0000 0001
a += 255; // 1 1111 1111
//10 0000 0000 (0)
希望你可以看得懂
------解决方案--------------------11楼上讲的原理很好
我这里说说过程
byte b=5;
b =b +2;//错误
为什么 b+=2;可以?
2 是个int类型
b 是个byte int是不可以转byte的,这是java语法,原理楼上分析了
byte 是可以转int的 ,也是java语法,原理楼上分析了
所以 b= b+2错了 原因是 首先 把b转换成int 加2 编程 int 7 之后在转byte时候 报错
b+=2 也不等价于 b= (byte)(b+2)
赋值运算符是不会改变原来类型的。
Java code
package test;
public class Testfuzhi {
/**
*【描述】:
*【作者】:alaric
*【时间 】:Jun 14, 2012
*
*/
public static void main(String[] args) {
byte b = 127;
b += 1;
System.out.println(b);
}
}