Java jdk源码 0814 基本数据类型

时隔多月,我又开始看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 基本数据类型)