面试题: short s = 1,s = s + 1; short s = 1,s += 1; 上面两个代码有没有问题?如果有,哪里有问题?
答:
第一行代码有问题。因为变量参与运算,首先会提升数据类型,然后再做运算,所以s=s+1;s会提升到int数据类型,然后再做加法运算,最终的结果是int类型,所以拿short数据类型接收会报错。要想成功赋值,就得强制类型转换
第二行代码没有问题。因为内部自动包含了强制类型转换
s+=1 ==> s=(s的数据类型)(s+1)
public class OptFuZhiDemo2 {
public static void main(String[] args) {
// short s = 1;
// s = s + 1; 报错.变量参与运算,首先会提升数据类型,即short变为int
// s = (short)(s + 1); //必须强制转换数据类型
short s = 1;
s += 1;
System.out.println(s);
}
}