经典面试问题:整数c=100,d=100,c==d一定是假的吗?
相信大家在面试的时候可能都遇到过这样的问题!
相信大家的回答都是假的真的。
但在这里我必须说,这个答案并不是绝对的。c==d一定是真的,但a==b不一定是假的,但有可能是真的。
但是我得到的值是真的,真的。如果你不相信或者有疑问,请往下看!
我们首先要明白为什么答案通常是假的和真的。
整数c = 1000实际上做了整数c = Integer的运算。值为(100)。让我们来看看Integer.class的源代码
从上面的代码可以看出,当I >;= IntegerCache.low & amp& amp我& lt当= IntegerCache.high时,将直接从缓存数组中取值,否则new将是一个新的Integer对象。
从上面Integer.class的源代码可以看出,low的默认值是-128,high的值与integerCacheHighPropValue有关。
我们没有在vm中设置Integercache的时候是127,缓存数组是从-128到127,这就不难理解为什么了。
短文开头提到的经典面试题,结果会有假有真。我后面强调的原因不一定是因为ntegerCacheHighPropValue不为null时,依赖于jvm中的设置。
在eclipse中,我们可以做以下事情:
这时,如果再次执行那个代码,就会得到true和true的结果。下次再有人问你这样的问题,你可以大声告诉他,那不一定是真的。