面试题-integer c=100 d=100 c==d 一定是false
概述
相信大家在面试的过程中可能都遇到过这样一道题吧!
1 | public static void main(String[] args) { |
相信大家得出的答案都是 false true
但是在这里我一定要说,这个答案不是绝对的 c==d 一定是true,但是a==b 却不一定就是false ,也有可能是true。
但是我得到的值是 true,true 如果不相信的同学或者抱有怀疑的同学请往下看!
我们首先要明白 通常情况下为什么答案会是 false,true。
Integer c = 1000 实际在内部做了Integer c = Integer.valueOf(100)的操作。我们来看一下Integer.class的源码。
1 | /** |
从上面的代码中可以看到,当i >= IntegerCache.low && i <= IntegerCache.high的时候会从cache数组里直接取值,否则new一个新的Integer对象。
1 | private static class IntegerCache { |
从上面的Integer.class源码中 可以看出,low的默认值是-128,high的值与integerCacheHighPropValue有关,
1 | String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); |
当我们未对vm中的Integercache进行设置的时候其莫认真是127,cache数组也就是从-128到127,这也就不难理解为什么。
在开文时提到的经典面试题的结果会是false 和 true,之所以我后面强调不一定,就是因为当ntegerCacheHighPropValue不为null的时候取决于jvm中的设置,
在eclipse中我们可以做这样的操作:
这时候再来执行那段代码,你就会得到结果是 true和true,下次谁再问你这样的问题,可以大声的告诉他不一定,实力装13一波!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus