Java数据类型总结

Java基本数据类型

  1. 数据类型分类

    Java语言内置了八种数据类型,其中六种数字类型,一种字符类型,一种布尔类型

    • byte

      • 数据类型8位,带符号,数值 -128(-27) 至 127(27-1)

      • 用在大型数组中节约空间

      • byte num1 = 100;
        
    • short

      • 数据类型16位,带符号,数值 -32768(-215) 至 32767(215-1)

      • short num2 = 1000;
        
    • int

      • 数据类型32位,带符号,数值 -2,147,483,648(-231) 至 2,147,483,647(231-1)

      • int num3 = 10;
        
    • long

      • 数据类型64位,带符号,数值 -263 至 263-1

      • 末尾需要增加 L 进行区分

      • long num4 = 100000L;
        
    • float

      • 单精度浮点,32位

      • 可以在存储大型浮点数组节约空间

      • 不能精确表示

      • float num5 = 50.1f;
        
    • double

      • 双精度浮点,64位

      • 不能精确表示

      • 小数点后全部为0可以省略,例如 10.0 可以写成 10. 和 10.D

      • double num6 = 10.0;
        double num6 = 10.D;
        double num6 = 10.;
        
    • boolean

      • 数据类型1位,只有true和false
    • char

      • 表示一个单一的16位Unicode字符(0 - 65536)
  2. 类型转换

    • 转换公式: 新类型 新变量 = (新类型) 旧变量;

    • 一定要先转换后计算

    • 类型Level

      • 从低到高: byte,short,char => int => long => float => double
    • 转换栗子

      • 低等级会自动转为高等级

      • int n1 = 100;
        long n2 = n1;
        
      • 高等级需要强制转换为低等级

      • long n1 = 100L;
        int n2 = (int) n1;
        
    • Problem

      1. blooean 不能参与转换

      2. 不能转换完全没有关系的数据类型

      3. 转换可能会产生内存溢出得不到正确结果,还可能会损失精度

        // 内存溢出
        int n1 = 128;
        byte n2 = (byte) n1; // ==> -128
        
        // 丢失精度
        float n3 = 10.5F;
        int n4 = (int) n3; // ==> 10
        
        // 大数时容易丢失产生内存溢出
        int n5 = 10_0000_0000;
        int n6 = 20;
        int n7 = n5 * n6; // ==> -1474836480
        long n8 = n5 * n6; // ==> -1474836480 因为先计算后转换的
        // 正确做法
        long n9 = (long) n5 * n6; // 因为先转换后计算的
        
  3. 拓展

    • 二进制、八进制、十进制、十六进制

      • 二进制以0b开头,八进制以0开头,十六进制以0x开头

      • int n1 = 0b10; //2
        int n2 = 010;  //8
        int n3 = 0x10; //16
        
    • float与double对比

      • 对比需要用到javas.math里面的BigDecimal

      • float f1 = 0.1;
        double d1 = 1.0/10.0;
        System.out.prinyln(f1 == d1) //false
        
      • BigDecimal 后续补充...
    • char类型可以与Unicode相互转换

      • char c1 = 'a';
        System.out.printlm((int) c1); ==> 97
        
        char c2 = '\u0061';
        System.out.println(c2); ==> a
        
posted @ 2021-04-17 00:41  Rainful  阅读(83)  评论(0编辑  收藏  举报