黑马程序员技术交流社区

标题: +=运算符的自动类型转换 [打印本页]

作者: iamzk    时间: 2015-8-14 18:30
标题: +=运算符的自动类型转换
short s=4;
s = s + 5;//error
s += 5;//ok
为什么+=运算符可以进行自动类型转换?
作者: zhao1991    时间: 2015-8-14 19:31
类似+=这种扩展的赋值运算符中隐含了一个强制类型转换,也就是说short s= 4;s+=5不完全等价于s=s+5,而是等价于s=(short)(s+5)
作者: iamzk    时间: 2015-8-14 20:06
恩,谢谢
作者: boboyuwu    时间: 2015-8-14 20:21
系统规定的常量和向上转型的变量都是隐式转换
作者: iamzk    时间: 2015-8-14 20:39
boboyuwu 发表于 2015-8-14 20:21
系统规定的常量和向上转型的变量都是隐式转换

那么s = s + 5中的5也应该隐式转换啊?
作者: boboyuwu    时间: 2015-8-14 20:56
iamzk 发表于 2015-8-14 20:39
那么s = s + 5中的5也应该隐式转换啊?

谁告诉你s=s+5隐式转换了  java规定s+=1时候才隐式转换 这个java虚拟机运行时候会变成s=(int)s+1
  s=s+5不隐式转换
作者: iamzk    时间: 2015-8-15 14:03
恩,明白了
作者: a1033978561    时间: 2015-8-15 14:35
因为s=s+5是先执行s+5 再进行赋值,因为s是short类型为2个字节,5为int类型4字节。所以s会被自动提升,s+5这个式子就变成int类型,然后赋值 两边类型不同  就出现了错误,,而s+=5 就一个步骤  只是将两边的和赋值给s,在内部进行了转换,这个没有为什么 ,理解就好了




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