类型转换~

类型转换

在Java程序中,不同的基本类型的值经常需要进行相互转换。Java语言所提供地7种数值类型之间可以相互转换,有两种类型的转换方式:自动类型转换和强制类型转换。

自动类型转换

Java所有的数值型变量可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换;否则就需要强制转换。表数范围小的可以向表数范围大的进行自动类型转换,就如同有两瓶水,当把小瓶里的水倒入大瓶中时不会有任何问题。Java支持自动类型转换的类型如下图所示:

 

图中所示的箭头左边的数值类型可以自动类型转换为箭头右边的数值类型。

强制类型转换

如果希望把自动类型转换图中箭头右边的类型转换为左边的类型,则必须进行强制类型转换,强制类型转换的语法格式是:(targetType)value,强制类型转换的运算符是圆括号(())。当进行强制类型转换时,类似于把一个大瓶子里的水倒入一个小瓶子,如果大瓶子里的水不多还好,但如果大瓶子里的水很多,将会引起溢出,从而造成数据丢失。这种转换也被称为“缩小转换(Narrow Conversion)”。

注意!!!

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

类型转换实例(具体会涉及的问题,和方法可借鉴):

public class Demo04 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i;//内存溢出
​
        //强制转换 (类型)变量名  高——低
        //自动转换  低——高
        System.out.println(i);
        System.out.println(b);
​
        int i2 = 128;
        double b2 = i2;//内存溢出
​
        //强制转换 (类型)变量名  高——低
        //自动转换  低——高
        System.out.println(i2);
        System.out.println(b2);
        /*
        * 注意点:
        * 1.不能对布尔值进行转换
        * 2.不能把对象类型转换为不相干的类型
        * 3.在把高容量转换到低容量的时候,强制转换
        * 4.转换的时候可能存在内存溢出,或者精度问题!*/
        System.out.println("========================");
        System.out.println((int)23.7);//23
        System.out.println((int)-45.89f);//-45
​
        System.out.println("========================");
        char c = 'a';
        int d = c+1;
        System.out.println(d);
        System.out.println((char)d);
    }
}
​

运行结果:

 

public class Demo05 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //JDK7新特性,数字之间可以用下划线分割
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years;//-1474836480, 计算的时候溢出了
        System.out.println(total);
        System.out.println("========================================");
        //方法2  不可取!!!!
        int money2 = 10_0000_0000;
        int years2 = 20;
        int total2 = money2*years2;//-1474836480, 计算的时候溢出了
        long total3 =money2*years2;//默认是int,转换之前已经存在问题了
        System.out.println(total3);
        System.out.println("========================================");
        //最终解决办法
        int money3 = 10_0000_0000;
        int years3 = 20;
        int total4 = money3*years3;//-1474836480, 计算的时候溢出了
        long total5 = money3*((long)years3);//先把一个数转换为long
        System.out.println(total5);
    }
}
​

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撒浪嘿呦743

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值