Java语法之类型转换和类型提升

自动类型转换(隐式)

含义

就是在代码被编译时,编译器会自动进行处理

特点

数据范围小的转化成数据范围大的时会自动进行

public class Test {
    public static void main(String[] args) {
        int a=10;
        short b=a;//编译不可通过
        short c=20;
        int d=c;//编译可通过
        double m=3.14;
        float n=m;//编译不可通过
        float x=1.21f;
        double y=x;//编译可通过
    }
}

注意下面的写法:

 int a=100;
 byte b1=a;//编译不可通过
 byte b2=100;//,虽然100默认为int类型,但因为100没有超过byte的范围,所以编译可通过
 byte b3=300;//300超范围了,所以编译不通过

一定要注意给b赋值100时的区别

强制类型转换

特点

一般用于范围大的数据到范围小的数据。由于编译无法通过,所以要进行人为操作

int a = 10;
short b =(short) a;//此时编译就可以通过

类型提升

规则

1.不同类型的数据混合运算,范围小的会提升成范围大的

2.对于short,byte这种小于四个字节的,会先提生成int类型再进行计算

举例

public class Test {
    public static void main(String[] args) {
        int a=10;
        long b=20L;
        int c=a+b;//编译不可通过
        long d=a+b;//编译可以通过
    }
}

运算前,a会被提升成long类型,所以a+b的结果为long类型,不能赋值给整型c

public class Test {
    public static void main(String[] args) {
        byte a=10;
        byte b=20;
        byte c=a+b;//编译无法通过
        byte d=(byte)a+b;//编译可以通过
        System.out.println(c);
    }
}

a和b在运算前被提升成了int类型,所以不能直接赋值给c,而要进行强制类型转换

你可能感兴趣的:(java,Java-se,java基础语法)