黑马程序员技术交流社区

标题: 朋友问我的题,求帮助 [打印本页]

作者: 王淼    时间: 2012-6-13 18:41
标题: 朋友问我的题,求帮助
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
作者: 王广丛    时间: 2012-6-13 18:44
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。

   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换
作者: 王淼    时间: 2012-6-13 18:45
王广丛 发表于 2012-6-13 18:44
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)( ...

明白了。。。非常感谢
作者: 打工人    时间: 2012-6-13 18:49
short s1 = 1; s1 = s1 + 1,这个不对,1是int型的,在运算过程中等式的右边(s1+1)会被提升成int型,而等式左边s1依旧是short类型的,所以会可能损失精度。

short s1 = 1; s1 += 1是对的,+=是赋值运算符,只做赋值运算,内部会有自动转换。
作者: 何拴绪    时间: 2012-6-13 18:59
整数默认为int类型,你和short运算要进行强转。
作者: 王红霞    时间: 2012-6-13 20:53

short s1 = 1; s1 = s1 + 1;是编译不成功的,因为s1是short型,s1+1是int型,s1和s1+1不是同一种数据类型,所以无法进行加运算。可以将s1+1前加short以进行强制转换,即(short)(s1 + 1),此时的值是short类型  可以赋值给s1 。
short s1 = 1; s1 += 1是正确的。因为+=是一种运算符,它本身带有自动强制转换功能。




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