我遇到了一个基础问题,也是很细节的很难发现的小问题,..大家来解释一下吧

如:
我们定义一个
short i=10;这一步我们在jdk1.5后就是正确的,因为jdk自带了拆装箱了。
下面是这样一段代码

short y=10+10;
y=y+10;
有些通知可能别迷惑以为y的结果是30,但是错了,这里是编译不能通过的。
那么
  y=y+=10 了;但是这个就是正确的,
  而y=y+10要强转成short    y=(short)(y+10);
 如果把变量参与运算的结果是一个int类型那么上面也说的通,但是为什么y=y+=10就不要强转了;

这是为什么, 按理来说 y+10 与 y+=0都是加10也没有区别啊,但是事实为什么有这么大的区别了,
高手们来指点一下吧...

2个回答

+加法运算符的返回类型是两个数中范围大的那个,int+double,返回的就是double
+=这个运算符的效果相当于y=y+10,但是返回值的类型不一样,+=的返回值类型还是y的类型

y=y+10;
10默认是int型的,int型与short型相加,结果是范围大的那个类型,所以结果是int,把int赋值给short,宽类型给窄类型,就报错了,所以需要强转。

y+=10的结果还是y的类型,虽然10默认还是int型的,但是JDK自动做了上面说的强制转换。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!