本帖最后由 18611643318 于 2016-6-2 23:26 编辑
不好意思,我第一次回复有点问题.
int 是基本数据类型.
Integer 是引用数据类型.
equals() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。
int 的自动装箱,是系统执行了 Integer.valueOf(int i).
java Integer 类里面的valueOf()的这个方法,有一个坑.
- public static Integer valueOf(int i) {
- if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
- return IntegerCache.cache[i + 128];
- else
- return new Integer(i);
- }
复制代码 -127到127,默认返回的是缓存的Integer对象(并不是新建对象)
所以a3和a4 实际指的是同一个对象.但是a1和a2就不一样了.
你可以具体看看java基础里面有一个day有详细讲解.
另外从网上找到一篇文章供你参考.
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html
这个题,其实是考的java的自动装箱和拆箱.1.5以后的新特性吧.你用1.4版本的jdk就不这样.
请记住这个坑啊...
|