黑马程序员技术交流社区

标题: 类型转换中的问题 [打印本页]

作者: 莞漂族    时间: 2014-5-27 15:23
标题: 类型转换中的问题

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


作者: NewDemo    时间: 2014-5-27 17:00
直接量1是int类型的,1+b的结果会自动提升为int类型,然后这个int类型的值赋值给byte类型的b当然会出错了,
作者: 帅哥哥    时间: 2014-5-27 17:08
是 b = b+1 这一句不能编译通过的,
b是byte变量,1是int常量,
byte变量 = byte变量+int常量 可能会超出等号左边byte变量的范围,
编译器很笨的,不会联系上下文,
编译器认为整数类型的默认类型是 int,对int会很照顾,
例如 int = int +int,也可能超出范围,但是编译器就给过,
总之嘛,编译器有时候会有些不讲理,这些就是规定啦,谁叫他笨呢
b += 1;就能通过了
作者: 莞漂族    时间: 2014-5-27 18:24
帅哥哥 发表于 2014-5-27 17:08
是 b = b+1 这一句不能编译通过的,
b是byte变量,1是int常量,
byte变量 = byte变量+int常量 可能会超出等 ...

谢谢你的耐心解答!
作者: 947415283    时间: 2014-5-27 22:50
还在看基础
作者: \(^o^)/    时间: 2014-5-29 00:27
在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类型,但这样强转的话可能会损失精度。

作者: 莞漂族    时间: 2014-5-31 16:20
\(^o^)/ 发表于 2014-5-29 00:27
在Java语言中整数的默认类型是int型,当你定义byte b=1的时候就是将1定义为byte类型,在b=b+1中左边是byte ...

多谢版主啊!:loveliness:
作者: 落叶非花    时间: 2014-6-2 11:46
来学习一下
作者: 何伟超    时间: 2014-6-3 00:15
byte-->int  自动转。  int -->byte  需强制转换




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2