Java修真界(斗之气四段)

类型转换

低----------------------------------------------------------------->高

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

运算中,不同类型的数据先转换为同一类型,然后进行运算。

  1. 强制类型转换
  2. 自动类型转换

【小数的优先级一定大于整数】

强制转换 【格式】(类型)变量名 高 ----> 低
自动转换 无需格式 低 ----> 高

强制转换

【格式】: ( 类型 ) + 变量名;

package DAY01;

public class demo05 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte) i;
        //强制转换【格式】: ( 类型 ) + 变量名;
        System.out.println(i);//输出【128】
        System.out.println(b);//输出【-128】
    }
}

为什么 b 的输出为 -128 呢?

答:因为Byte类型的数据最大值为127,故内存溢出了。

情况一:int i=3654;

byte ba = 127;
        int i=3654;
        byte bb = (byte)i;
        System.out.println(ba);
        System.out.println(i);
        System.out.println(bb);  // 70
        System.out.println(i%128-128*((i/128)%2));  // 70
        System.out.println(128*((i/128)%2)); // 0
        System.out.println(i/128); // 28
        System.out.println(i%128); // 70

情况二:int i=3754;

 byte ba = 127;
        int i=3754;
        byte bb = (byte)i;
        System.out.println(ba);
        System.out.println(i);
        System.out.println(bb);  // -86
        System.out.println(i%128-128*((i/128)%2));  // -86
        System.out.println(128*((i/128)%2)); // 128*1
        System.out.println(i/128); // 29
        System.out.println(i%128); // 42

如何查Byte类型数据的Max和Min值

  1. 输入一个Byte
Byte    // 【Ctrl+鼠标左键单击】

然后就可以出现下图。

在这里插入图片描述

代码

public class demo04 {
    public static void main(String[] args) {
        int i =128;
        byte b = (byte) i ; //内存溢出

        //强制转换 (类型)变量名

        System.out.println(i);
        System.out.println(b);
        System.out.println("========================");
        //强制转换  【格式】(类型)变量名  高 ----> 低
        //自动转换      无需格式          低 ----> 高
       //【低-->高】byte、short、char----> int--->long --->float -->double
        int j =128;
        double c = j ;

      System.out.println(j);//输出为【128】
        System.out.println(c);//输出为【128.0】

        /*
        【注意】:
        1.不能对布尔值进行转换【判断对错】
        2.不能把对象类型转换为不相干的类型
        3.在把高容量转换到低容量的时候,强制转换
        4.转换的时候可能存在内存溢出,或者精度问题!
         */

        System.out.println("===========");
        System.out.println((int) 23.7); // 输出23
        System.out.println((int)-45.974f); //输出-45
        //向0取整 ,精度丢失了

        System.out.println("=============");
        char e = 'a';
        int d = e + 1;      //【自动转换为Int类型:低--->高】
        System.out.println(d); //输出为98
        System.out.println((char)d); //输出b  【强制转换】
    }
}

操作比较大的数的时候,注意溢出问题

public class demo05 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //数字之间可以用下划线分割,输出时,下划线不会被输出
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years; //说明计算的时候溢出了
        System.out.println(total); //输出为【-1474836480】 理论上为200亿
        //Integer最大为 0x7fffffff = 2^31-1=21_4748_3647 21亿多

    }
}

如果是money = 1_0000_0000,就不会溢出。

public class demo05 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //数字之间可以用下划线分割,输出时,下划线不会被输出
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years; //说明计算的时候溢出了 【-1474836480】
        long total2 = money*years;
        //先计算,默认是int,转换之前就已经存在问题了,出问题后,在进行类型转换
        //Long是非常大的数据类型
        System.out.println(total2); //【-1474836480】这样编码依旧是有问题的
    }
}

正确的代码

public class demo05 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //数字之间可以用下划线分割,输出时,下划线不会被输出
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years; //说明计算的时候溢出了 【-1474836480】
        long total2 = money*years;
        //先计算,默认是int,转换之前就已经存在问题了,出问题后,在进行类型转换
        //Long是非常大的数据类型
        long total3 = (long)money*years; //先把一个数转换成Long
        System.out.println(total3); //【200亿】对的
    }
}
//第11行也可以换成long total3 = (long)money*(long)years;
//或者long total3 = money*(long)years;
//或者更规范点 long total3 = money*((long)years);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值