Java基本数据类型变量运算规则(Day10)

27 阅读3分钟

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

  1. 可进行基本数据类型变量间的运算规则的基本数据类型有7种,不包含boolean类型

  2. 运算规则包括

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

自动类型提升

规则: 容量小的变量与容量大的变量进行运算时,自动转换为容量大的数据类型

说明:

  1. 容量指变量表示的数据范围的大小,并非指其占用内存的大小
  2. byte、short、char ===> int ===> long ===> float ===> double
  3. byte、short、char类型变量之间两两做运算,其结果均为int类型
class VariableTest3{
    public static void main(String[] args) {
        int i1=10;
        long l1=i1;
        float f1=l1;
        byte b1=12;
        int i2=b1+i1;
        //错误: 不兼容的类型: 从int转换到byte可能会有损失
        //byte b2=b1+i1;
        //特殊部分1
        byte b3=12;
        short s1=10;
        //错误: 不兼容的类型: 从int转换到short可能会有损失
        // short s2=s1+b3;
        int i3=b3+s1;
        //特殊部分2
        char c1='s';
        //错误: 不兼容的类型: 从int转换到char可能会有损失
        // char c2=c1+b3;
        int i4=c1+b3;
    }
}

练习

        //练习1
        long l2=123L;
        // 自动类型提升
        long l3=123;
        // 错误: 整数太大,此时该变量理解为int类型
        // long l4=123123123123;
        long l5=123123123123L;
​
        //练习2
        float f2=12.3f;
        //错误: 不兼容的类型: 从double转换到float可能会有损失
        // float f3=12.3;
​
        // 练习3
        byte b4=10;
        //错误: 不兼容的类型: 从int转换到byte可能会有损失
        //byte b5=b4+1;
        int i5=b4+1;
​
        //错误: 不兼容的类型: 从double转换到float可能会有损失
        //float f3=b4+12.3;
        double d1=b4+12.3;
​
        //练习4
        //错误: 不是语句
        long 123l=12;
        long l6=123l;

规定:

  1. 整型常量为int类型
  2. 浮点型常量规定为double类型
  3. 变量名不能以数字开头为了其内部规则“自洽”,不产生冲突

强制类型转换

规则: 将取值范围大(或容量大)的类型强制转换为取值小(或容量小)的类型

  • 自动类型提升是Java自动执行的,强制类型转换需程序员手动执行
  • 强制类型转换需要使用强转符() ,在() 内指明想要转换的目标数据类型
  • 强制类型转换过程中可能导致精度损失问题

转换格式:

变量类型 变量名=(变量类型)进行变量转换的变量名或变量值;

强制转换

        double d1=12;
        //错误: 不兼容的类型: 从double转换到int可能会有损失
        //int i1=d1;
        int i1=(int)d1;
        System.out.println(i1);
        // 结果:12
​
        long l1=123;
        short s1=(short)l1;
        System.out.println(s1);
        // 结果:123   
        
        int i2=12;
        float f1=i2;
        System.out.println(f1);
        // 结果:12.0
        // 编译通过,一般()省略
        float f2=(float)i2;        

精度损失

        double d2=12.99;
        int i3=(int)d2;
        System.out.println(i3);
        // 结果:12
​
        int i4=128;
        byte b1=(byte)i4;
        System.out.println(b1);
        // 结果:-128