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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

王淼

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 王淼 注册黑马   /  2012-6-13 18:41  /  1640 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

5 个回复

倒序浏览
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只被计算一次。

   换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
赵志勇 + 1 赞一个!
王淼 + 3 很给力!

查看全部评分

回复 使用道具 举报
王广丛 发表于 2012-6-13 18:44
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)( ...

明白了。。。非常感谢
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1,这个不对,1是int型的,在运算过程中等式的右边(s1+1)会被提升成int型,而等式左边s1依旧是short类型的,所以会可能损失精度。

short s1 = 1; s1 += 1是对的,+=是赋值运算符,只做赋值运算,内部会有自动转换。
回复 使用道具 举报
整数默认为int类型,你和short运算要进行强转。
回复 使用道具 举报

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是正确的。因为+=是一种运算符,它本身带有自动强制转换功能。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马