• 基本类型。

    byte、short、int、long、float、double、char 和 boolean。

  • 包装类。

    Byte、Short、Integer、Long、Float、Double、Character 和 Boolean。

  • 基本类型所占字节数及默认值。

    基本类型所占字节取值范围默认值
    byte127-2^{7}~2712^{7}-10
    short2215-2^{15}~21512^{15}-10
    int4231-2^{31}~23112^{31}-10
    long8263-2^{63}~26312^{63}-10
    float43.402823e+38 ~ 1.401298e-450.0F
    double81.797693e+308~ 4.9000000e-3240.0D
    char2''
    boolean10/1false
  • 包装类默认值为 null。

  • 基本类型 == 比较的是值。

    byte a = 1;
    byte b = 1;
    System.out.println(a == b); // true
  • 包装类 == 比较的是地址,两个 new 出来的包装类,会在堆中生成一个对象, == 操作返回 false。

    Integer a = new Integer(1);
    Integer b = new Integer(1);
    System.out.println(a == b); // false
  • 一个 new 出来的包装类和一个非 new 出来的包装类进行 == 比较,两者地址不同,返回 false。

    Integer a = 1;
    Integer b = new Integer(1);
  • 包装类除了 Float 和 Double,其他的类型的值保存在常量池中,Integer 在常量池中缓存的值的范围是 [-128,127],超过这个范围会重新 new 一个对象,放在堆中。

    Character a = 'a';
    Character b = 'a';
    System.out.println(a == b); // true
    Float c = 0.1F;
    Float d = 0.1F;
    System.out.println(c == d); // false
    Integer e = 1;
    Integer f = 1;
    System.out.println(e == f); // true
    Integer g = 128;
    Integer h = 128;
    System.out.println(g == h); // false
  • 基本类型和对应的包装类进行比较,包装类会自动拆箱, == 比较两者的值。

    int a = 1;
    Integer b = 1;
    System.out.println(a == b); // true
  • 不同的基本类型进行 == 比较,会发生隐式类型转换,比较两者的值。

    int a = 1;
    byte b = 1;
    System.out.println(a == b); //true,byte 会转为 int
  • 不同的包装类型不能进行 == 比较,会发生编译错误。

    Integer a = 1;
    Byte b = 1;
    System.out.println(a == b); //error,不可比较的类型:java.lang.Integer 和 java.lang.Byte