作者:zJv老方有点坑爹额B | 来源:互联网 | 2023-09-18 14:22
public static void main(String[] args) {
short s2 = 1;
s2 = s2 +1;
short s1 = 1;
s1+= 1;
System.out.println(s1);
}
为什么 s2 = s2+1报错
而 s1+=1就不报错呢?
26 个解决方案
short s2 = 1;
s2 = s2 +1;//你这是一个短整型和一个整型运算,肯定会报错。
short s1 = 1;
s1+= 1;//这种写法,强制把1转换成short类型了,当然不会报错了。
因为需要类型强制转换 s2=(short)(s2 +1);
s2 = s2+1报错的原因是1默认是int类型的,s2+1执行结束后java会自动向上类型转化为int类型,而
s2是short类型的,short是不等于int的所以会报错,你 改成s2 = (short)s2+1就好了 而s1+=1不报错的原因是他和s2+1的处理机制不一样,java会对他自动进行处理
lz 都说的很多了
这道题好像很多面试资料都有提到
隐式转换short和int的问题
你换成short s2=s1+(short)1;试试!
s2 = s2 + 1 ---> s2 = (int)s2 + (int)1;但是s2是short
s1 += 1; ---> s1 = (short)(s1 + 1);short在于int相加的时候会自动升级到int的
LZ还会问,为什么 s2=s2+1--->s2=(int)s2+1;
因为1是int型,s2是short,
但是s2发现,呦我要和这个int搞基,我得变身。
它一变转成了int型的s2
所以 s2=(int)s2+1;还需要变身s2=(short)((int)s2+1);
强调一下,s2本来就是short类型,不过因为运算把
运算右边搞成int型,所以还需要转换回short型。
public class MM
{
public static void main(String[] args)
{
short s2 = 1;
s2=(short)((int)s2+1);
short s1 = 1;
s1+= 1;
System.out.println(s1);
System.out.println(s2);
}
}
这样就行了 ,
对与你提的问题和我看的以上楼主的解释 我也是初学者 我实验了一下 对于s2=s1+(short)1; 和 s2=short(s2+1);都是不正确的 s2=(short)(s2+1);这才是正确的 希望对你有帮助;我们要对于任何问题都要亲自验证
s2是short类型,和1运算的时候会强制转换成int,但是你把一个int的结果复制给short类型的s2,肯定会报错。
s2 = s2 +1;s2 +1会自动转换成int型的 所以赋值的时候会报类型转换错误。
short s1 = 1;s1+= 1; 不会变成不会发生类型转换。
http://blog.csdn.net/qingyun1029/article/details/5938926
这都不结贴 服了 看3楼 简洁明了;
其实还有个比较大的区别 大家都没说出来;那就是 s2+=1 比 s2 = s2 + 1 要耗性能。 为什么,你可以百度。
赶快 结贴吧~
s2 += 1 jvm会进行特殊处理,这个符号可以理解为java语言的语法糖。