黑马程序员技术交流社区

标题: byte加byte不是byte类型? [打印本页]

作者: liyudong    时间: 2016-11-2 22:34
标题: byte加byte不是byte类型?
byte b = 10;
b = b + (byte)2;
System.out.println( b );
b的数据类型是byte,加上一个2我转换了他的数据类型为byte,赋值给左边的b的数据类型也是b,为何会报错 可能损失精度 呢?
正确写法为 b = (byte)(b + 2);
short s = 1;
s = (short)(s + 1);
System.out.println(s);
作者: 梦魇0023    时间: 2016-11-2 22:36
初始化b的问题吗?

作者: shy4458    时间: 2016-11-2 22:36
b只是变量

作者: 黑马初学者    时间: 2016-11-2 23:14
Java的基层运算常量优化机制
作者: 小牛想成为大牛    时间: 2016-11-2 23:40
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
byte b2=10;   b1+b2;这里做运算了,得到的结果就是int类型了,但是要注意值的范围。 但是常量在做运算时不会这样,因为java底层有常量优化机制,在做运算时会有自动转换了。
作者: 大妖怪图图君    时间: 2016-11-2 23:56
byte变量加int常量结果提升为int类型了,赋值给byte变量,当然会报错了。除非你用b +=2  +=运算符包含强制转换
作者: liyudong    时间: 2016-11-3 00:05
小牛想成为大牛 发表于 2016-11-2 23:40
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
by ...

变量运算会向上提升,我明天试一试。

作者: liyudong    时间: 2016-11-3 00:18
小牛想成为大牛 发表于 2016-11-2 23:40
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
by ...

变量会自动提升,我明天试试,原来大神在这里,拜服

作者: liyudong    时间: 2016-11-3 01:14
大妖怪图图君 发表于 2016-11-2 23:56
byte变量加int常量结果提升为int类型了,赋值给byte变量,当然会报错了。除非你用b +=2  +=运算符包含强制 ...

是byte类型加byte类型好么

作者: bbbbittersweet    时间: 2016-11-3 01:17
初始化b的问题吗?
作者: liyudong    时间: 2016-11-3 01:17
黑马初学者 发表于 2016-11-2 23:14
Java的基层运算常量优化机制

可以详细解释一下什么是

作者: liyudong    时间: 2016-11-3 01:22
shy4458 发表于 2016-11-2 22:36
b只是变量

是变量没错的啊,可是byte加byte为int

作者: Tyoo    时间: 2016-11-3 14:03
b + 2有一个是变量,那么相加的时候会自动提升为int类型的,结果也是int,int赋值给b(byte)类型的,就会损失精度
作者: 792241113    时间: 2016-11-3 14:13
没明白这是什么意思哦
作者: anTG    时间: 2016-11-3 14:17
byte参与运算会自动转化为int
作者: 黑马初学者    时间: 2016-11-3 23:09
liyudong 发表于 2016-11-3 01:17
可以详细解释一下什么是

就是虽然在运算之前加了强转,但在运算过程中,java虚拟机还是把它默认转换成int类型再运算的,结果自然就是int类型
作者: cobblerime    时间: 2016-11-4 22:50
变量数据类型为byte short int参与运算时,会自动提升至int运算的。
作者: Jerry007    时间: 2016-11-5 00:05
因为byte数据类型进行运算时,会自动提升为int类型进行运算,而你用beye类型来接收,当然就错了.楼主好水
作者: liyudong    时间: 2016-11-5 22:44
黑马初学者 发表于 2016-11-3 23:09
就是虽然在运算之前加了强转,但在运算过程中,java虚拟机还是把它默认转换成int类型再运算的,结果自然 ...

谢谢,谢谢,现在已经明白了

作者: 雪中鱼01    时间: 2016-11-5 23:06
b做加法自动转换成了int

作者: 明月已驻人何在    时间: 2016-11-5 23:51
将右边的所有的结果强转为byte才行

作者: Wangyk    时间: 2016-11-10 21:43
byte在混合运算中,会自动提升为int型,所以b = b(他是int型) +(byte)2;会报错




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