Integer拆装箱问题
来看一个小题目
1 | Integer a = 2; |
这是为啥呢,同样是比较两个相等的数,怎么一个是true一个是false呢
这是因为在编译时,如果发现有将基本类型int赋值给包装类性Integer,会将其编译为Integer.valueOf(int),如果将包装类Integer赋值给基本类型int,则会自动调用intValue方法,这就是自动拆装箱
既然会自动调用Integer.valueOf(int),那就看一下该方法吧
1 | public static Integer valueOf(int i) { |
可以看到在-128和127数值之间,会直接读取IntegerCache.cache中的值,既然这些值都是被cache的,所以这些值对应的同一个数字的Integer对象是在同一块内存地址,而不在这个范围的数字,就会实例化一个新的Integer