首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java类型提升的有关问题

2012-06-20 
Java类型提升的问题byte b5b b +2//错误为什么 b+2可以?[解决办法]相似的问题,看看:http://topic.cs

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

热点排行
Bad Request.