02 Java基本数据类型转换

学习数据转换的原因

         由于Java是 强类型语言,所以参与“赋值运算”和“算数运算”时需要用到类型转换。

运算中,不同类型的数据先转换为同一类型,然后进行运算。(小数的优先级一定大于整数)

  • byte、short、char -> int -> long(L 64)-> float(32)-> double

         char、byte、short三种类型在进行混合运算时,会自动提升数据类型,先转换成int型。其变量可以保存默认为int类型的常量(前提是常量的值在类型的范围内),但是不能直接保存为int类型的变量值,需要进行强制类型转换

1.1 Java基本数据类型转换

      在赋值运算或算术运算时,要求数据类型相同,否则就要进行类型转换。

      转换的方式:                       

               自动类型转换(隐式)

               强制类型转换(显示)

public static void main(String[] args) {

    //强制转换  (类型)变量名  高 --> 低
    int i = 128; 
    byte a = (byte)i;  //内存溢出  byte范围: -128 ~ 127
    System.out.println("========精度丢失========");
    System.out.println((int)23.7);    //23
    System.out.println((int)-45.89f); //-45

    //自动转换 低-->高
    double b = i;
    System.out.println(i);  //128
    System.out.println(a);  //-128
    System.out.println(b);  //128.0
    System.out.println("=======典型面试题=========");
    char c = 'a';
    char d = c+1;
    System.out.println(d);        //98
    System.out.println((char)d);  //b
}

注意点:

  • 不能对布尔值(boolean)进行转换。

  • 不能把对象类型转换为不相关的类型。

  • 再把高容量转换到低容量时,强制转换。

  • 转换的时可能存在内存溢出,或者精度问题

算数运算中的类型自动转换原则

       如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型,结果为double类型。

否则,如果其中一个操作数是float类型,另一个将会转换为float类型,结果为float类型。

否则,如果其中一个操作数是long类型,另一个会转换为long类型,结果为long类型。

否则,两个操作数都转换为int类型,结果默认为int类型

public static void main(String[] args) {
    //操作比较大得数时,注意溢出问题
    //数字间可以用下划线分割
    int money = 10_0000_0000;
    int year = 20;
    int total = money*year;    //-1474836480  计算时溢出
    long total2 = money*year;  //默认是int,转换为long前已出错   
    long total3 = money*((long)year);//先把一个数转换为long
    System.out.println(total); 
    System.out.println(total2); 
    System.out.println(total3); 
}

结果输出:

-1474836480
-1474836480
20000000000

1.2 自动类型转换

         容量小的数据类型可以自动转换为容量大的数据类型(低字节向高字节转换)。

public static void main(String[] args) {
    double d = 10;          //10其实是int型
    System.out.println(d);   
    System.out.println("=======典型的面试题======");  
    char c = 'a';
    System.out.println(c);        //  ascli表
}

 结果输出:

10.0
======典型的面试题=======
98

1.3 强制类型转换

目标数据类型 变量名(类型)变量名

public static void main(String[] args) {
    double d = 88.8;          //10其实是int型
    int i = (int)num    //强制转换,会丢掉精度
    System.out.println(i);   
    System.out.println("======典型的面试题=======");  
    byte a = 20;
    byte b = 10;
    byte total = b+a;//为什么报错?b、a在运算时会自动转换成int类型,但用byte类型接收,所以会报错。
    byte total = (byte) (b+a); 
    System.out.println(total); 
}

结果输出:

88
======典型的面试题=======
30

         char、byte、short三种类型在进行混合运算时,会自动提升数据类型,先转换成int型。其变量可以保存默认为int类型的常量(前提是常量的值在类型的范围内),但是不能直接保存为int类型的变量值,需要进行强制类型转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值