</pre><p>在java中,有时需要将int这样的基本类型转换成对象,所有的基本类型都有与之相对应的类。例如,Integer类对应基本类型int,通常将这些类称为包装器。今天在研究相关的包装器类的时候发现了一个特别需要留意的地方,具体的代码如下:</p><p></p><pre name="code" class="java">public class MainTest {
public static void main(String args[]){
Integer a = 1000;
Integer b = 1000;
Integer c = 100;
Integer d = 100;
if(a == b){
System.out.println("a == b");
}
if(a.equals(b)){
System.out.println("a.equals(b)");
}
if(c == d){
System.out.println("c == d");
}
}
}
a.equals(b)
c == d
在这里可以看出上述代码中第一个if条件直接被过滤掉了,为什么呢?
原因是:基于对象包装器类的自动装箱的时候有一个规范要求,要求boolean,byte,char<=127,介于-128~127之间的short和int被包装到固定的对象中,因此上述代码中的c和d指向的是同一个存储区域,用==运算符是可以比较的。然而对于不在此范围的对象,要想比较是否相等的话,只能在比较时调用equals方法了!