永发信息网

Java:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

答案:5  悬赏:70  手机版
解决时间 2021-03-22 04:30
  • 提问者网友:不要迷恋哥
  • 2021-03-21 10:21
Java:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
最佳答案
  • 五星知识达人网友:拾荒鲤
  • 2021-03-21 10:48
前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1)。
后面一句没错。
1、Java规范有这样的规则
[
a.高位转低位需要强制转换
b.低位转高位自动转.
]
2、short s1 = 1; s1 = s1 + 1;中,1 是int 型 s1 short型 通过 + 运算后s1 自动转为int 型 所以错!
3、后面一句没有错是因为Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),而(s1 += 1)表达式使用的是复合赋值操作符,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。
全部回答
  • 1楼网友:山有枢
  • 2021-03-21 14:17
s1 = (short)(s1 + 1);
s1+1已经变成int了,没办法再赋值给short类型的s1了。
s1+=1没问题。追问为什么第一个就变成int了第二个就没变呢大哥追答精度小于int的数值运算的时候都回被自动转换为int后进行计算,
比如s1+1结果就是int的。
但是s1+=1这个就不是int,就是short。我也不知道为啥。
  • 2楼网友:轮獄道
  • 2021-03-21 13:28
+=,是一种运算符
  • 3楼网友:轻熟杀无赦
  • 2021-03-21 12:32
short是0—127
int是-128~0~17
所有short可以自动转换成int,int不能自动转换成short,必须强制转换。
第一个是short转int,可以自动转换
第二个是int转short,不可以。
  • 4楼网友:轻熟杀无赦
  • 2021-03-21 11:47
前面加上(short)即可
short s1=1;
s1=(short)(s1+1);

原因就跟 5+1.1的一样。
因为double型(1.1)的取值范围比int型的大,所以,最后的结果会用double型表示而不用int的表示。
同理,int的取值范围比short大,所以,一个int加上一个short,最终结果会是int追问那为什么s1 += 1没变成int呢大哥追答那么奇怪?!我看看
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯