经常看到一些比较两个Integer的数值大小直接用==,我以前也是,后来经过改正,严格比较两者的intValue,因为两个不同的对象用==肯定不相等。
然而经常看到用==的情况,测试一下竟然也相等,自己随便写个测试程序又不相等,百思不得其解,后来查询相关资料,原来是Java自动装箱的原因。
何为自动装箱?
Integer a = 1000;
Integer b = 1000;
System.out.println(a==b); //结果false
Integer a = 100;
Integer b = 100;
System.out.println(a==b); //结果true
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a==b); //结果false
以上是具体实验结果,Integer a = 100,系统自动执行了Integer a = new Integer(a),即为自动装箱,由于对-128至127之间的数值被装箱为对象后在内存中重用,所以出现以上情况,而通过new则是创建了一个不同的对象。
同理,以下是String的自动装箱现象:
String c = "abc";
String d = "abc";
System.out.println(c==d); //true
String e = new String("abc");
String f = new String("abc");
System.out.println(e==f); //false