美文网首页
Java jdk源码 0814 基本数据类型

Java jdk源码 0814 基本数据类型

作者: 学习吧朱小宁 | 来源:发表于2020-08-19 09:27 被阅读0次
    时隔多月,我又开始看jdk源码了。上次看完了String 类型,现在去看下基本数据类型。
    

    8种数据类型分别为

    1. 整型 byte short int long
    2. 浮点型 double float
    3. 逻辑型 boolean
    4. 字符型 char
     static boolean bool;
        static byte by;
        static char ch;
        static double d;
        static float f;
        static int i;
        static long l;
        static short sh;
        static String str;
    public void contextLoads() {
            System.out.println("查看基本数据类型的结构");
            // byte
            System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
            System.out.println("包装类:java.lang.Byte");
            System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
            System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
            System.out.println("默认值为:" + by);
            System.out.println();
    
            // short
            System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
            System.out.println("包装类:java.lang.Short");
            System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
            System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
            System.out.println("默认值为:" + sh);
            System.out.println();
    
            // int
            System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
            System.out.println("包装类:java.lang.Integer");
            System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
            System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
            System.out.println("默认值为:" + i);
            System.out.println();
    
            // long
            System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
            System.out.println("包装类:java.lang.Long");
            System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
            System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
            System.out.println("默认值为:" + l);
            System.out.println();
    
            // float
            System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
            System.out.println("包装类:java.lang.Float");
            System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
            System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
            System.out.println("默认值为:" + f);
            System.out.println();
    
            // double
            System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
            System.out.println("包装类:java.lang.Double");
            System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
            System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
            System.out.println("默认值为:" + d);
            System.out.println();
    
            // char
            System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
            System.out.println("包装类:java.lang.Character");
            // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
            System.out.println("最小值:Character.MIN_VALUE="
                    + (int) Character.MIN_VALUE);
            // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
            System.out.println("最大值:Character.MAX_VALUE="
                    + (int) Character.MAX_VALUE);
            System.out.println("默认值为:" + ch);
        }
    

    根据以上程序可以看到不同的基本类型 对应的含义及 二进制位数的不同
    最大值为 2^(二进制位数-1) 最小值为 2^(二进制位数-1) -1 默认值数值类型都为0 boolean类型为false char类型为‘’ 空字符串
    基本类型 都含有一个包装类型 此类型会自动拆装箱转换 包装类型默认值都是null
    从数据类型源码中可以看到 都 extends 了Number 实现了不同转换值的方法
    此外 根据Integer 类型源码中 highestOneBit() lowestOneBit() 实现方案都是使用二进制进行位计算

     public static int highestOneBit(int i) {
            // HD, Figure 3-1
            i |= (i >>  1);
            i |= (i >>  2);
            i |= (i >>  4);
            i |= (i >>  8);
            i |= (i >> 16);
            return i - (i >>> 1);
        }
      public static int lowestOneBit(int i) {
            // HD, Section 2-1
            return i & -i;
        }
    

    获取最低位计算使用了 & 计算当前数据与相反数的位计算。 lowestOneBit()暂时不清楚内部运算方法

    //long 源码中计算字符串位数的方法
     // Requires positive x
       static int stringSize(long x) {
           long p = 10;
           for (int i=1; i<19; i++) {
               if (x < p)
                   return i;
               p = 10*p;
           }
           return 19;
       }
    

    源码中有很多方法思想都值得学习,上面这个计算位数的方法,传入的变量是要计算的数据。

    相关文章

      网友评论

          本文标题:Java jdk源码 0814 基本数据类型

          本文链接:https://www.haomeiwen.com/subject/ipgwdktx.html