基本类型。
byte、short、int、long、float、double、char 和 boolean。
包装类。
Byte、Short、Integer、Long、Float、Double、Character 和 Boolean。
基本类型所占字节数及默认值。
基本类型 所占字节 取值范围 默认值 byte 1 ~ 0 short 2 ~ 0 int 4 ~ 0 long 8 ~ 0 float 4 3.402823e+38 ~ 1.401298e-45 0.0F double 8 1.797693e+308~ 4.9000000e-324 0.0D char 2 '' boolean 1 0/1 false 包装类默认值为 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