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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© iamzk 中级黑马   /  2015-8-14 18:30  /  765 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s=4;
s = s + 5;//error
s += 5;//ok
为什么+=运算符可以进行自动类型转换?

7 个回复

倒序浏览
类似+=这种扩展的赋值运算符中隐含了一个强制类型转换,也就是说short s= 4;s+=5不完全等价于s=s+5,而是等价于s=(short)(s+5)
回复 使用道具 举报
恩,谢谢
回复 使用道具 举报
系统规定的常量和向上转型的变量都是隐式转换
回复 使用道具 举报
boboyuwu 发表于 2015-8-14 20:21
系统规定的常量和向上转型的变量都是隐式转换

那么s = s + 5中的5也应该隐式转换啊?
回复 使用道具 举报
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:43
7#
恩,明白了
回复 使用道具 举报
因为s=s+5是先执行s+5 再进行赋值,因为s是short类型为2个字节,5为int类型4字节。所以s会被自动提升,s+5这个式子就变成int类型,然后赋值 两边类型不同  就出现了错误,,而s+=5 就一个步骤  只是将两边的和赋值给s,在内部进行了转换,这个没有为什么 ,理解就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马