Java 基本数据类型转换

目录

1.自动类型提升

2.强制类型转换

基本数据类型变量间的运算规则

可以做运算的基本数据类型有7种,分别为byte、short、int、long、float、double和char,不包含boolean类型。

1.自动类型提升

规则:当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数据类型。

byte 、short 、 char ---> int ---> long --->float ----> double

说明:此时的容量小或大,并非指占用的内存空间大小,而是指表示数据的范围的大小。

1.1赋值运算中的类型转换

 public static void main(String[] args) {
        byte b = 1000;  //编译不通过,整数常量不能超过其类型的范围 byte类型范围(-128~127)
        short s = 852;  //short类型范围(-32768~32767)
        //把整数类型即int类型值赋值给byte,short,char类型变量,属于自动类型提升的特例,不能超出其类型的范围
        int i = 7896;
        long l1 = 123L;
        long l = 123;  //理解为自动类型提升
        long l2 = 123123123123;//错误,123123123123123理解为int类型,超出了int范围,所以错误。
        long l3 = 123123123123L;此时的123123123123就是使用8个字节存储的long类型的值
        float f = 741;
        float f1 = 12.3F;
        float f2 = 12.3;//编译不通过,不满足自动类型提升的规则(double--->float)
        double d = 7965;
        //将int类型值赋给long,float,double类型,符合容量小的变量自动转换为容量大的数据类型的规则。
    }

1.2算数运算中的类型转换

情况1:如果是byte、short、char类型的做运算,结果为int类型;

情况2:整型常量,结果是int类型;

情况3:浮点型常量,结果是double类型

public static void main(String[] args) {
      //情况1:如果是byte、short类型的做运算,结果为int类型;
        byte b1 = 23;
        int i1 = 12;
        int i2 = b1 + i1;
        byte b2 = b1 + i1;//编译不通过
        short s1 = 10;
        short s2 = s1 + b1;//编译不通过
        i2 = s1 + b1;
        byte b2 = 25;
        byte b3 = b1 + b2;//编译不通过
        char c1 = 'a';
        char c2 = c1 + b1; //编译不通过
        int i3 = c1 + b1;
      //情况2:整型常量,结果是int类型;
        byte b3 = 10;
        int i4 = b3 + 1;
      //情况3:浮点型常量,结果是double类型
        double d1 = b3 + 25.5;
    }

2.强制类型转换

可以理解为自动类型提升的逆运算。

规则:

1.如果需要将容量大的变量的类型转换为容量小的变量的类型,需要使用强制类型转换。

2.强制类型转换需要使用强制符:()。在()内指明要转换为的数据类型。

3.强制类型转换过程中可能导致精度损失。

public static void main(String[] args) {
        double d1 = 12;//自动类型提升
        int i1 = (int) d1;
        System.out.println(i1);//输出:12

        long l1 = 123;
        short s1 = (short) l1;
        System.out.println(s1);//输出:123
     //精度损失例子:
        double d2 = 12.3;
        int i2 = (int) d2;
        System.out.println(i2); //输出:12  截断
        int i3 = 128;
        byte b1 = (byte) i3;
        System.out.println(b1);//输出:-128 原反补移
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值