Java类型提升的问题 byte b=5;b =b +2;//错误为什么 b+=2;可以? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 b +2会在计算过程中把b提升为int型,所以需要强制类型转换。而b+=2不会。至于为什么不会,期待高手解答。 其中b定义成了byte类型,而2是int类型,不同的基本数据类型相加时会把低级的强制转换成更高一级的,所以b+2的结果是int类型,将此结果赋给byte类型,相当于是高级的赋给低级的,所以会出错,至于b+=2是自身加2,相当于是将2转换成byte类型的,然后再加给b,结果仍然是byte类型的,所以是不会出错的 看了二三楼的解释存在疑惑:b =b +2;//错误是因为 一个byte类型 + int类型的2 类型不同 所以有错?而b+=2等价于b=(byte)(b+2)因为被强制转换了 所以没错? 相似的问题,看看:http://topic.csdn.net/u/20120531/20/f15cd160-6940-4f7f-8290-b86244461cbc.html?38016 +=是java规定的运算符,会对其进行特殊处理。所以不会有错。 2是常量 会转byte? b = (byte)2 + b 会编译错误的 b = (byte) (b + 2)才对 public static void main(String[] args) { byte b = 5; byte c = (byte) (b + 2); b += 2; System.out.print(b == c); }输出为true 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 0001a += 127; // 1111 1111 // 10000 0000 (-128)byte a = 1; // 0000 0001a += 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)赋值运算符是不会改变原来类型的。package test;public class Testfuzhi { /** *【描述】: *【作者】:alaric *【时间 】:Jun 14, 2012 * */ public static void main(String[] args) { byte b = 127; b += 1; System.out.println(b); }}你试试这个就知道它是什么过程了 ,这个结果是-128 byte的范围是-128 ~ 127 参考 http://hongyan.cqupt.edu.cn/gjpd/bcxk/article.php?id=78 redirectPort有什么用途哦? oracle 链接报错 java子类覆盖父类方法的问题,在线等 命令行不能云行class文件 大神请进,html改成jsp格式 如何在VC中调用java的可执行文件 《帮顶有分》jtable如何实现数据验证 接口是什么,和抽象类有什么区别 请问静态变量声明时未被赋值会被分配空间吗? 为什么从sqlserver2000数据库提出来的结果集汉字变成乱码? 以到小题目 在netbeans里如何使用表格
而b+=2不会。至于为什么不会,期待高手解答。
存在疑惑:
b =b +2;//错误
是因为 一个byte类型 + int类型的2
类型不同 所以有错?而b+=2等价于b=(byte)(b+2)
因为被强制转换了 所以没错?
http://topic.csdn.net/u/20120531/20/f15cd160-6940-4f7f-8290-b86244461cbc.html?38016
2是常量 会转byte? b = (byte)2 + b 会编译错误的 b = (byte) (b + 2)才对
public static void main(String[] args) {
byte b = 5;
byte c = (byte) (b + 2);
b += 2;
System.out.print(b == c);
}输出为true
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)
希望你可以看得懂
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)
赋值运算符是不会改变原来类型的。package test;public class Testfuzhi { /**
*【描述】:
*【作者】:alaric
*【时间 】:Jun 14, 2012
*
*/
public static void main(String[] args) {
byte b = 127;
b += 1;
System.out.println(b);
}}
你试试这个就知道它是什么过程了 ,
这个结果是-128 byte的范围是-128 ~ 127 参考 http://hongyan.cqupt.edu.cn/gjpd/bcxk/article.php?id=78