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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张开开 黑马帝   /  2012-3-22 14:41  /  2292 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1;; (s1+1运算结果是int型,需要强制转换类型)  short s1 = 1;;(可以正确编译)
请问下, s1 = s1 + 1和 s1 += 1有什么区别?谢谢

5 个回复

倒序浏览
s1=s1+1中,s1是short型,1是int型,s1+1运算时,右边s1先转成int型再跟1相加,结果为int型,然后将结果
赋给左边short型s1,因为int型占四个字节,short占两个字节,出错
s1+=1中,  +=不仅具有赋值功能,还具有转换功能,将结果转成short型,不出错

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
s1=s1+1中,由于1是int型,会将是s1转换成int型与1相加,这时的结果是int型,赋值给short型出错。
s1+=1中,+=有强制转换功能,会将右边表达式的类型转换成左边的类型。这行语句相当于s1=(short)(s1+1);
回复 使用道具 举报
        对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
回复 使用道具 举报
s1 = s1+1;是将s1+1的结果(int型的数)付给short型的数,必须手动转型,而s1+=1;付值的过程是虚拟机完成的,
一般情况下,两个不同类型的数参与运算会自动转型,而单纯的付值必须手动完成s1 = (short)(s1+1);s1+=1;+=其实代表一个运算符,内部自动转换成了s1的类型;
回复 使用道具 举报
本帖最后由 朱俊 于 2012-5-16 14:59 编辑
  1. ~~~~~~~~~~~~~~~~~
复制代码

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

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