short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
在Java中,当你执行short s1 = 1; s1 = s1 + 1;
时,会出现编译错误。原因是s1 + 1
的运算结果是int
类型,因为Java会在运行时将s1
自动提升为int
类型以避免数据溢出。因此,你试图将一个int
类型的结果赋值给s1
,这需要一个显式的强制类型转换,否则就会产生错误。
正确的写法应该是使用显式的强制类型转换,像这样:
short s1 = 1;
s1 = (short)(s1 + 1);
而对于short s1 = 1; s1 += 1;
这样的代码,在Java中,s1 += 1
是合法的表达式,它等同于s1 = (short)(s1 + 1)
。这里的s1
会被隐式地转换为int
类型,加上1
之后结果仍然是int
类型,然后又被隐式地转换回short
类型并赋值给s1
。由于Java允许这种从大类型到小类型的自动转换,所以s1 += 1
不会产生错误。