通过以上的几个核心实验,可以给大家梳理出一个结论: 当我们利用”==“等号比较两个Integer i 和 Integer j的值时,如果取值范围是在-128~127之间,两个相同的Integer值会返回true;如果不在该区间,两个相同的Integer值会返回false。这是因为Integer是final类,编译器把Integer i = 100; 自动变为Integer i = Integer.valueOf(100);。为了节省内存,Integer.valueOf()对于较小的数,始终会返回相同的实例对象,因此,==比较的结果就是true。 那么如果我们只是为了比较两个Integer对象的值是否相等,而不是为了比较两个对象的地址是否相同,在开发时请尽量使用equals()方法,而不是==!
并且我们现在还知道,在Java中有3种方式可以构造出一个Integer对象,代码如下:
//方法1:
Integer i = new Integer(100);
//方法2:
Integer i = Integer.valueOf(100);
//方法3:
Integer i = 100;实际上,方法2和方法3的本质是一样的,所以开发时为了简洁,我们一般是通过方法3来得到一个Integer对象。但是尽量不要使用方法1来构建Integer对象,这是因为方法1总是会创建一个新的Integer实例,而方法2和方法3则会尽可能地返回缓存的实例对象,以节省内存。
所以最终关于”int和Integer的区别有哪些“这道面试题的答案,如果你想拿到高分,就需要把Integer的底层原理也回答出来才行!如果你可以把以上内容都回答清楚,我相信单凭这一道题目,就足以让面试官对你刮目相看!