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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 蒋珍珍 于 2014-3-12 12:06 编辑

下面两条语句:short s=3; s+=1;//为什么第二句能够编译运行都正确?而s+=1;这个语句编译却失败,这两条语句有什么区别吗,不都是关于数据类型的自动提升吗

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

7 个回复

倒序浏览
各位大神解释的太详细了,偶懂啦,
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
而+=这个运算符系统会自动完成类型的提升。

并且因为表达式最终的类型是由最后一个运算符决定的,而复合赋值运算+=是不会改变最终结果的数据类型。
short s=3;
s+=1;
"+="为复合赋值运算符,运算后没有改变变量s的数据类型,它的类型仍为short,所以编译运行正确
而如果写成s=s+s;的话,编译失败就是因为+运算时把结果类型提升为了int的,而int类型的值是不能直接赋给short类型的s的。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马