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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liyudong 中级黑马   /  2016-11-2 22:34  /  3049 人查看  /  21 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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

21 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
Java的基层运算常量优化机制
回复 使用道具 举报
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
byte b2=10;   b1+b2;这里做运算了,得到的结果就是int类型了,但是要注意值的范围。 但是常量在做运算时不会这样,因为java底层有常量优化机制,在做运算时会有自动转换了。
回复 使用道具 举报
byte变量加int常量结果提升为int类型了,赋值给byte变量,当然会报错了。除非你用b +=2  +=运算符包含强制转换
回复 使用道具 举报
小牛想成为大牛 发表于 2016-11-2 23:40
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
by ...

变量运算会向上提升,我明天试一试。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
小牛想成为大牛 发表于 2016-11-2 23:40
因为变量在做运算的时候会向上提升,比如byte,shor,char在做运算时都会提升为int类型。如: byte b1=10;
by ...

变量会自动提升,我明天试试,原来大神在这里,拜服
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
大妖怪图图君 发表于 2016-11-2 23:56
byte变量加int常量结果提升为int类型了,赋值给byte变量,当然会报错了。除非你用b +=2  +=运算符包含强制 ...

是byte类型加byte类型好么
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
初始化b的问题吗?
回复 使用道具 举报
黑马初学者 发表于 2016-11-2 23:14
Java的基层运算常量优化机制

可以详细解释一下什么是
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
shy4458 发表于 2016-11-2 22:36
b只是变量

是变量没错的啊,可是byte加byte为int
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
Tyoo 中级黑马 2016-11-3 14:03:31
13#
b + 2有一个是变量,那么相加的时候会自动提升为int类型的,结果也是int,int赋值给b(byte)类型的,就会损失精度
回复 使用道具 举报
没明白这是什么意思哦
回复 使用道具 举报
anTG 来自手机 中级黑马 2016-11-3 14:17:09
15#
byte参与运算会自动转化为int
回复 使用道具 举报
liyudong 发表于 2016-11-3 01:17
可以详细解释一下什么是

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

谢谢,谢谢,现在已经明白了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
b做加法自动转换成了int
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马