版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yz_cfm/article/details/85250078
int与Integer的区别:
(1)Integer是int的包装类,属于引用类型;int是基本数据类型;
(2)Integer的默认值初始值是null(引用类型);int的默认初始值是0(基本数据类型);
(3)情况一: 一个直接Integer 和 一个new Integer()比较:
// Integer test1 = xx时,xx如果是 [-128, 127] 之间的值时,编译时: Integer test1 = Integer.valueOf(test1);
// 否则编译时为: Integer test1 = new Integer(test1); 具体参考下面分享的链接。
Integer test1 = xx;
Integer test2 = new Integer(xx);
Sysout.out.println( test1==test2 );
无论如何,test1 和 test2 都不会相等。
a. test1 在 [-128, 127]:
因为test1 在常量池中(方法区内),new出来的对象 test2 存放在堆中,它们的内存地址不一样,所以false。
b. test1 在 [-128, 127]:
因为test1 和 test2 都是new出来的对象,存放在堆中并且它们的内存地址不一样,所以false。
(4)情况二: 两个直接 Integer 比较:
Integer test1 = xx;
Integer test2 = xx;
Sysout.out.println( test1==test2 );
如果test1 和 test2 都在 [-128, 127]区间,返回true,否则返回false;
扫描二维码关注公众号,回复:
4726267 查看本文章
(5) 情况三: 两个new Integer 比较:
Integer test1 = new Integer(xx);
Integer test2 = new Integer(xx);
Sysout.out.println( test1==test2 );
返回false,因为它们指向不同的对象,所以拥有不同的内存地址。
(6) 情况四: int 和 Integer(直接 Integer 和 new Integer()) 比较:
Integer test1 = 12;
int test2 = 12;
Integer test1 = new Integer(168);
int test2 = 168;
返回true;因为编译器会把Integer 自动拆箱为 int之后再做对比。
具体分析详情参考如下文章: