short s=1;s=s+1;与 short s=1;s+=1; 误区

首先我们先说明一下Java中的基本数据类型转换:

在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double
简单数据类型之间的转换又可以分为:

  • 低级到高级的自动类型转换(隐式)
  • 高级到低级的强制类型转换(显式)
  • 包装类过渡类型能够转换

隐式类型转换可以从小到大自动转换,即byte->short->int->long;反过来会丢失精度,必须进行显示类型转换

short s=1;

s=s+1;

然而不知你们有过这样疑问?1在short值的范围内,此时就不能视为是short类型吗?这样s+1不就是没有类型差异吗?

原因是:整数的默认类型是 int

由上面的分析可得到的结果:自然是编译不通过的 提示损失精度 ,因为1为int类型所以转换为short类型必须强制转换。

然而
short s=1;
s+=1;
为什么能编译通过那?
还有一个问题 : s+=1的意思与s=s+1不同吗?还真不一样!

  s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换所以将一个int类型赋给short就会出错,
  s+=1不同,由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),反过来讲就是 s+=1 <=> s = (s的类型)(s+1)

参考资料:

http://www.cnblogs.com/Relict/archive/2011/12/01/2270758.html

http://blog.csdn.net/u011240877/article/details/47721135

猜你喜欢

转载自blog.csdn.net/fanxiaobin577328725/article/details/73477426