黑马程序员技术交流社区

标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? [打印本页]

作者: 天,殇心    时间: 2014-6-21 20:57
标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += java语言规定的运算符,暗含着类型强制转换,java编译器会对它进行特殊处理,因此可以正确编译。


作者: ╰繼/aiq戀い    时间: 2014-6-21 21:03
我也是这样想的 +=是强转赋值
作者: 天,殇心    时间: 2014-6-21 21:06
╰繼/aiq戀い 发表于 2014-6-21 21:03
我也是这样想的 +=是强转赋值

嗯,:lol,有问题一起探讨吧
作者: ╰繼/aiq戀い    时间: 2014-6-21 21:06
我也是这样想的 +=是强转赋值
作者: ≥﹏≤我还太年    时间: 2014-6-21 21:24
byte b1 = 3;
byte b2 = 4;
byte = b1+b2;
报错:java编译器编译的时候无法确定右边两变量运算结果是否超过byte范围、
byte = 3+4;
不会报错:java编译器编译的时候可以确定右边常量是否超过byte范围、

小于int的俩变量(byte或者short)相加、默认结果为int类型。


byte自动转换为int与另一个int相加即使超出int不会报错、正常运算、但是会溢出
short和byte道理一样

作者: rekirt    时间: 2014-6-21 21:33
带运算的赋值会隐式进行强制转换,

变量之间的运算首先转换类型再运算,例如b3=b1+b2,首先把b1和b2转换为int类型再运算,
常量之间的运算首先运算,然后比较结果是否有溢出,例如b4=3+4;不会报错




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