在java中 short s1 = 1; s1 = s1 + 1; 有什么错 ?

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:02:15
请说明 谢谢

当然有错误,short占2个字节,int占4个字节,short型变量+上int型值计算结果是int型,占4个字节,然后付给一个short型变量s1,就要丢失2个字节的精度,这是不容许的。你非要这么做的话,我给你提供一个办法:
s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。
您的进步是我最大的动力,如果你觉得我回答的合理的话,请给我多加分。谢谢,如果不明白的话,大家相互学习啊!

Type mismatch: cannot convert from int to short.
强制转换下就可以了:
s1=(short)(s1+1);或者 s1+=1;也是可以的

这个拿去编译不会出错。。 运行也不会出错
这个只是声明一个叫s1的short变数为1 然后把s1的新值定为原来的s1加上1

错是没错 不过看你想拿s1干什么了。。

是报错为可能损失精度吗?呵呵,这个问题的原因就是所有声明为short的类型变量在进行运算时都会自动转为int类型的变量,这样s1+1就不是short型的,而变成int类型的,这时再赋给还是short类型的s1就会报精度损失错误了,这样改下就不会报错了
s1=(short)(s1+1),试试看!

编译不通过。

s1是short, s1+1的结果是int,因为s1 + 1可能会产生short位溢出,因此vm将存储空间分配一个int的宽度,返回结果也是int,将int类型赋值给short, 编译器会报错。