【Java基础面试题】short s=1; s=s+1;或s+=1;都能编译正确吗

189 阅读1分钟

看这个问题,我们要先回忆下Java中类型转换中的两个规则;

  • byte/short/char类型变量可以被int字面量直接赋值,但不能超出各自的取值范围;
  • byte/short/char类型在参与运算时,系统会将其统一转换为int再运算,则结果也变为int;
short s = 1;
s = s + 1;  
//idea会有报错提示:Required type:short Provided:int
//遵循上面的规则,此时s+1结果已为int类型
//int类型范围大于short类型,所以无法再直接赋值给short类型的变量s,需强转
//(数据类型范围byte short int long float doubel)


//此时可以强制转换下
s = (short)(s + 1);
System.out.println(s);  //2

而扩展赋值运算符+=,自带了自动强转功能,编译不会报错;

short s = 1;
s += 1;  //相当于s = (short)(s+1)
System.out.println(s); //2

所以s=s+1;编译报错、s+=1;编译正常。