众所周知基本数据类有各自的包装类,比如Boolean,Integer,Double
那这些包装类除了能提供装箱拆箱,类型转换的功能 ,还有一些比较偏门的知识点。
前几天去杭州面试,问了这样一个
Integer a= ?;和 int
Integer b=?;(两个问号)是同一个整形。那么请问(a==b)打印出来是为true还是false;
当时可高兴了,整这么简单的问题问老子实在太低估我了。
两个对象比较,当然不相等了。false!
面试官的表情让我知道,错了!
后来才想明白=后面那个字面量是有取值范围的
如果在[-128,127]区间,那么是true,
如果在那个区间以外那就是false;
因为,
这个区间内的话,是有缓存的。否则就要在内存中再分配一个空间。
jvm为了性能的优化而搞得这么一个设计。
真是吃一堑长一智。