黑马程序员技术交流社区

标题: 类型转换方面的小问题 [打印本页]

作者: V_nan    时间: 2015-4-27 17:45
标题: 类型转换方面的小问题
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 short sh=0;
  6. //                sh=sh+1;报错,损失精度
  7.                 sh+=1;//这样为什么能通过?
  8.                 System.out.println("sh="+sh);
  9.         }
  10. }
复制代码

作者: 龙腾浩少    时间: 2015-4-27 18:13
+= 含有隐式的自动类型转换,将+=右面得到的数据强制转换成了左边数据的数据类型,所以不会报错,其实就是
short s = 1;
s += 1;
等同于
s = (short)(s + 1);
作者: 考不上黑马    时间: 2015-4-27 18:15
这个是毕老师视频里面的原题,他原话怎么说的我也忘记了,不太喜欢这种风格的题目。我自己大致理解为报错的那句是因为做运算运算符的两侧需要同类型。我把+=理解为了赋值符,呵呵
作者: V_nan    时间: 2015-4-27 20:12
龙腾浩少 发表于 2015-4-27 18:13
+= 含有隐式的自动类型转换,将+=右面得到的数据强制转换成了左边数据的数据类型,所以不会报错,其实就是
...

原来这样啊,谢了
作者: 大西洋    时间: 2015-4-27 20:20
V_nan 发表于 2015-4-27 20:12
原来这样啊,谢了

学习~ 感谢分享!
作者: hufu4635    时间: 2015-4-27 20:29
sh=sh+1,在运算的时候被提升为int型,把一个int型的值赋值给short型,所以会不兼容。而赋值运算符,jvm虚拟机会自动帮我们完成强制类型的转换的。
作者: 珠宝    时间: 2015-4-27 21:27
sh=sh + 1,short型数据自动提升为int型数据是四个字节的数据类型把结果赋值给两个字节类型的short装不下所以损失精度而short +=1,计算机对它有一个自动强转的动作,虽然可以通过,但如果数据超出short 的范围,结果可能不是我们要的值




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