public class Test{
public static void main(String[] args) {
int a1 = 30;
int a2 = 30;
// 值比较:true
System.out.println(a1 == a2);
int b1 = 130;
int b2 = 130;
// 值比较:true
System.out.println(b1 == b2);
Integer c1 = 30;
Integer c2 = 30;
// 类比较,但在-127~128之间,属于常量:true
System.out.println(c1 == c2);
Integer d1 = 130;
Integer d2 = 130;
// 类比较,不在-127~128之间,属于新建对象:false
System.out.println(d1 == d2);
Integer e1 = 130;
Integer e2 = 130;
// 类转为数值比较:true
System.out.println(e1.intValue() == e1.intValue());
Integer f1 = 130;
int f2 = 130;
// f1自动拆箱,不涉及128陷阱,与f2比较:true
System.out.println(f1 == f2);
long g1 = 30;
long g2 = 30;
// 值比较:true
System.out.println(g1 == g2);
long h1 = 130;
long h2 = 130;
// 值比较:true
System.out.println(h1 == h2);
Long i1 = 30l;
Long i2 = 30l;
// 类比较,但在-127~128之间,属于常量:true
System.out.println(i1 == i2);
Long g1 = 130l;
Long g2 = 130l;
// 类比较,不在-127~128之间,属于新建对象:false
System.out.println(g1 == g2);
Long k1 = 130l;
Long k2 = 130l;
// 类转为数值比较:true
System.out.println(k1.longValue() == k2.longValue());
Integer l1 = 130l;
int l2 = 130l;
// l1自动拆箱,不涉及128陷阱,与l2比较:true
System.out.println(l1 == l2);
}
}
简单一点讲装箱就是基本数据类型自动转换为包装类,拆箱与之对应,包装类自动转换为基本数据类型.
//自动装箱
Integer s = 123;
//上面语句其实相当于这条语句
Integer ss = Integer.valueOf(123);
装箱就是自动将基本数据类型转换为包装器类型;
拆箱就是自动将包装器类型转换为基本数据类型。
警告:
自动装箱规范要求,boolean、byte、char<=127, -128<= short、int <=127被包装到固定的对象中。
也就是说:刚才a和b都等于127,介于-128~127之间,所以他俩其实指向的是同一个对象,所以用==比较的话,肯定是true。