java面试(3):int与integer的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 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之后再做对比。

具体分析详情参考如下文章:

https://blog.csdn.net/chenliguan/article/details/53888018

猜你喜欢

转载自blog.csdn.net/yz_cfm/article/details/85250078
今日推荐