为什么要数据类型转换?

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

数据类型转换的种类

自动类型转换(隐式):

  • 特点:代码不需要我们进行特殊处理,自动完成
  • 规则:将数据取值范围小的类型 自动提升为 数据取值范围大的类型 。

案例演示:

package com.wu.day02;

public class Demo1DataType {
    public static void main(String[] args) {
        System.out.println(1024);//默认类型为int
        System.out.println(3.24);//默认类型是double
        // 左边是long类型,右边是默认的int类型,左右不一样
        long number = 1024;// int ---> long 符合了数据范围,从小到大的要求。发生了自动类型转换
        System.out.println(number);//100
        double number2 = 3.14F;  // float -->double。符合了数据范围,从小到大的要求。
        float number3 = 332L; // long ---> float .符合了数据范围,从小到大的要求。
        
    }
}

强制类型转换(显示)

  • 特点:将 取值范围大的类型 强制转换成 取值范围小的类型。代码需要进行特殊的格式处理,不能自动完成。:
  • 格式:范围小的类型  范围小的变量名称  = (范围小的类型)原本范围大的数据;

代码演示:

 

package com.wu.day02;

public class Demo2DataType {
    public static void main(String[] args) {
        // 左边是int类型,右边是long类型 int---> long 不能自动完成.
        // 格式: int类型  变量名称 = (int类型)long类型;
        int number1 = (int) 6565L;
        float number2 = (float) 3.14;
        long number3 = (long) 2.314F;

    }
}

类型转换注意事项:

  •  强制类型转换一般不推荐使用,因为有可能发生数据溢出,精度损失。
        int number1 = (int) 656513213234234356L;
        System.out.println(number1);//数据溢出。19743732
        long number3 = (long) 2.314F;
        System.out.println(number3);//2 精度损失
  • byte、short、char都可以发生数学运算。 运算时会先提升为 int ,在进行计算。
  • 布尔类型,不能发生数据类型转换
  • 在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到对应的int数字,再和int类型计算。char类型提升 为了int类型。

 编译器的两点优化:

优化1:

  • 对于byte/shor/char三种类型来说。如果右侧的赋值的数值没有超过范围。javac编译器将会自动隐含为我们强制转换为对应的数据。超过了,直接报错.

优化2:

  • 在给变量进行赋值的时候,如果右侧的表达式当中全部是常量。那么编译器将先计算出表达式的结果,在赋值。一旦表达式当中有变量参与,就不能这种操作了。

 

 

 

---

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄