public class Plus {
public static void main(String[] args) {
short s=10;
s=s+1;
}
}
上面的程序在运行时会报错
java: 不兼容的类型: 从int转换到short可能会有损失
原因是s是short类型的数据,而1默认是int类型的数据,二者相加会自动转换为int类型的数据,无法再用short类型数据接收
如果一定要用short接收,有两个办法
一是强制类型转换,将s+1转换为short类型
public class Plus {
public static void main(String[] args) {
short s=10;
s=(short)(s+1);
System.out.println(s);
}
}上述程序可以正常输出,输出结果为1
但是要注意转换的数据如果超过short的表示范围,会有精度损失
二是使用单目运算符++
public class Plus {
public static void main(String[] args) {
short s=10;
s=s++;
System.out.println(s);
}
}上述程序输出结果也为1,且不用进行类型转换
从汇编角度分析,我觉得原因可能是 short类型为16字节,和32字节的int型运算后数据变为32字节大小,此时即使高16位全为0机器也无法识别;而++运算short类型数据可能只进行了INC运算,不会增加位数
原文:https://www.cnblogs.com/writenow/p/14454780.html