黑马程序员技术交流社区

标题: 关于类型提升 [打印本页]

作者: 张开开    时间: 2012-3-22 14:41
标题: 关于类型提升
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有什么区别?谢谢
作者: 张明星    时间: 2012-3-22 14:53
s1=s1+1中,s1是short型,1是int型,s1+1运算时,右边s1先转成int型再跟1相加,结果为int型,然后将结果
赋给左边short型s1,因为int型占四个字节,short占两个字节,出错
s1+=1中,  +=不仅具有赋值功能,还具有转换功能,将结果转成short型,不出错
作者: 杨朝辉    时间: 2012-3-22 15:13
s1=s1+1中,由于1是int型,会将是s1转换成int型与1相加,这时的结果是int型,赋值给short型出错。
s1+=1中,+=有强制转换功能,会将右边表达式的类型转换成左边的类型。这行语句相当于s1=(short)(s1+1);
作者: 王思兰    时间: 2012-3-22 15:15
        对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
作者: 周建    时间: 2012-3-22 15:20
s1 = s1+1;是将s1+1的结果(int型的数)付给short型的数,必须手动转型,而s1+=1;付值的过程是虚拟机完成的,
一般情况下,两个不同类型的数参与运算会自动转型,而单纯的付值必须手动完成s1 = (short)(s1+1);s1+=1;+=其实代表一个运算符,内部自动转换成了s1的类型;
作者: 朱俊    时间: 2012-3-22 16:03
本帖最后由 朱俊 于 2012-5-16 14:59 编辑
  1. ~~~~~~~~~~~~~~~~~
复制代码





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