为什么Java中1000==1000为false而100==100为true?
为什么Java中1000==1000为false而100==100为true? |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
缓存池问题,JVM会默认缓存-128到127的整数,生成整数时,如果该数字在缓存池已经存在,就会从池中返回你对象,而不是重新生成,所以 两个100 引用的是同一个对象, == 返回true |
|
|
|
|
我觉得楼主应该自己New 一个 Integer 然后 Ctrl 点进去看源码就知道了。
我帮你看一下吧,点进去看第780行
privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;StringintegerCacheHighPropValue=sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if(integerCacheHighPropValue!=null){try{inti=parseInt(integerCacheHighPropValue);i=Math.max(i,127);//MaximumarraysizeisInteger.MAX_VALUEh=Math.min(i,Integer.MAX_VALUE-(-low)-1);}catch(NumberFormatExceptionnfe){//Ifthepropertycannotbeparsedintoanint,ignoreit.}}high=h;cache=newInteger[(high-low)+1];intj=low;for(intk=0;k=127;}privateIntegerCache(){}} |
|
|
|
|