日期:2014-05-20  浏览次数:20793 次

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);
    }

}