对象包装器与自动装箱和拆箱

</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方法了!


猜你喜欢

转载自blog.csdn.net/gen504240809/article/details/40477113