近在上课过程中,发现之前自己一直忽略的问题,就是int与Integer的实实在在的区别。我们知道,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null,这些是众所周知的。但是,如果”Integer i = 1;int j = 1; i==j”为true还是为false?这时就不是那么从容自若了。所以我对它们进行了总结,希望对大家有帮助。
首先看代码:
class Test
{
public static void main(String[] args)
{
Integer i = 10;
Integer j = 10;
int ii = new Integer(10);
int jj = new Integer(10);
Integer iii = new Integer(10);
Integer jjj = new Integer(10);
1. System.out.println(i==j);
2. System.out.println(ii==jj);
3. System.out.println(ii==jjj);
4. System.out.println(i==iii);
5. System.out.println(i==jj);
}
}
第一行输出是true,两个引用变量指向的都是常量10,这是没有疑问的。
第二行输出是true,两个整型变量比较的是数值。
第三行输出是多少这里就有些疑问了,这里要清楚,int 和 Integer比较时,会自动拆箱,所以返回true
第四行输出是false,因为两个引用变量指向的是两个不同的内存空间。
第五行输出是true,这和第三行一样的。
总结如下:
① 论如何,Integer与new Integer不会相等。不会经历拆箱过程,ii的引用指向堆,而i指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
② 两个都是new出来的,都为false
③ int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5,京公海网安备11010802025203号