java中+=运算符问题

望远镜Monkey 2012-10-29 09:17:56
public class test{
public static void main(String[] args){
byte a=5;
a=a+5;
byte b=5;
b+=5;
}
}
这段代码中,a=a+5因为表达式a+5是int类型,赋值给byte类型a而错误,下面的b+=5为什么不会报错呢,+=的运行机制究竟是怎么样的?求各位解惑!
...全文
247 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
望远镜Monkey 2012-10-30
  • 打赏
  • 举报
回复
结贴了,谢谢大家的热心解答,特别感谢andamajing、龙四,解释很清楚。
a8509190 2012-10-30
  • 打赏
  • 举报
回复
+=是会把后面的5自动强转的 而你a=a+5 因为a的类型比Int小 而他会自动转换成int所以在把Int赋值给Byte型会报错。
龙四 2012-10-30
  • 打赏
  • 举报
回复
qqid88147418 2012-10-30
  • 打赏
  • 举报
回复
这个问题很好 !
halfsuccess 2012-10-29
  • 打赏
  • 举报
回复
低级数据类型与高级数据类型运算的时候,低级数据类型首先转换为高级数据类型在进行运算,所以:
[Quote=引用 2 楼 的回复:]

这个问题在《Java Pullzers》书中有描述,问题在于java中,对于上述问题中复合运算符的运算,首先byte类型数据b转换为int类型,然后和int类型进行计算,计算的结果会自动通过强制类型转换转换为byte类型存储在b中,而对于简单运算符来说,并不会自动调用强制类型转换,所以编译会出错,解决的办法就是使用强制类型转换,如a=(byte)(a+5);
[/Quote]
zhaoming262350 2012-10-29
  • 打赏
  • 举报
回复
强制类型转换问题:
解释如下:
public class test10
{
public static void main(String[] args)
{
byte a=5;
a=(byte) (a+5); // 运算的a 是int型的,5是int型,因此需要强制类型转换,把int型转 // 换成byte型,输出的a是byte型的
System.out.println(a); // 把a强制转换成byte
byte b=5;
b+=5;
System.out.println(b);//直接输出的是byte的
}


}
DreamMakers 2012-10-29
  • 打赏
  • 举报
回复
这个问题在《Java Pullzers》书中有描述,问题在于java中,对于上述问题中复合运算符的运算,首先byte类型数据b转换为int类型,然后和int类型进行计算,计算的结果会自动通过强制类型转换转换为byte类型存储在b中,而对于简单运算符来说,并不会自动调用强制类型转换,所以编译会出错,解决的办法就是使用强制类型转换,如a=(byte)(a+5);
记得要记得 2012-10-29
  • 打赏
  • 举报
回复
因为+=有自动强制类型的功能,不会报错

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧