面试遇到short和int的转换问题,当时有些疑惑,在这里总结一下!
第一种情况
public static void main(String[] args) {
short a = 1;
a += 1; //不用强转
a = (short) (a + 1); //需要强转,
}
可能大家会比较迷惑,为什么两种操作都是+1,但一个需要强转一个不需要?
a += 1 :因为在Java规范中,复合赋值是自带了隐式的强制类型转换的。
a = a+1 : 因为先执行的是a+1,会先将a强转为int,之后将int赋值给short就会出现编译错误
第二种情况
public static void main(String[] args) {
int a = 1;
int b = 2;
short c = (short) (a+b); //int直接赋值给short时需要强转操作
}
第三种情况
public static void main(String[] args) {
short a = 1;
short b = 2;
short c = (short) (a + b); //两个short做运算后再进行赋值的话,也需要强转;
}
因为在做运算操作时,编译器会自动将比int精度小的类型转换为int进行操作,所以运算之后是int类型,需要强转;
第四种情况
public static void main(String[] args) {
short a = 1;
short b = 2;
int c = a + b; //两个short做运算操作会转成int类型来操作,所以这里的short不需要强转;
}
第五种情况
public static void main(String[] args) {
short a3 = 1;
int c3 = a3; //short可以直接赋值给int类型,不用强转
}