A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莞漂族 中级黑马   /  2014-5-27 15:23  /  1486 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


byte b = 1; b = b + 1; 说说编译不能通过的理由吧

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

8 个回复

倒序浏览
直接量1是int类型的,1+b的结果会自动提升为int类型,然后这个int类型的值赋值给byte类型的b当然会出错了,
回复 使用道具 举报
是 b = b+1 这一句不能编译通过的,
b是byte变量,1是int常量,
byte变量 = byte变量+int常量 可能会超出等号左边byte变量的范围,
编译器很笨的,不会联系上下文,
编译器认为整数类型的默认类型是 int,对int会很照顾,
例如 int = int +int,也可能超出范围,但是编译器就给过,
总之嘛,编译器有时候会有些不讲理,这些就是规定啦,谁叫他笨呢
b += 1;就能通过了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
帅哥哥 发表于 2014-5-27 17:08
是 b = b+1 这一句不能编译通过的,
b是byte变量,1是int常量,
byte变量 = byte变量+int常量 可能会超出等 ...

谢谢你的耐心解答!
回复 使用道具 举报
还在看基础
回复 使用道具 举报
在Java语言中整数的默认类型是int型,当你定义byte b=1的时候就是将1定义为byte类型,在b=b+1中左边是byte类型的b,而右边是byte类型的b+整形的1,这样一来虽然说最后的结果最后还是在byte范围内,但当虚拟机执行到这条语句的时候并不知道一个byte类型的数和一个int类型的数相加会不会超出byte类型的范围,所以虚拟机就报错,如果你想让编译通过的话可以写成b=(byte)(b+1);就是强制将b+1转成byte类型,但这样强转的话可能会损失精度。

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

回复 使用道具 举报
\(^o^)/ 发表于 2014-5-29 00:27
在Java语言中整数的默认类型是int型,当你定义byte b=1的时候就是将1定义为byte类型,在b=b+1中左边是byte ...

多谢版主啊!:loveliness:
回复 使用道具 举报
来学习一下
回复 使用道具 举报
byte-->int  自动转。  int -->byte  需强制转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马