Java基本数据(short和int的转换问题)

面试遇到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类型,不用强转
    }
发布了49 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41999455/article/details/103127719