`
yjkun
  • 浏览: 12904 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

真是挺蛋疼的java比较符号

阅读更多

public static void main(String[] args)
   {
     int a = 1000, b = 1000;
     System.out.println(a == b);

 

     Integer c = 1000, d = 1000;
     System.out.println(c == d);
 
     Integer e = 100, f = 100;
     System.out.println(e == f);
   }

运行结果是:true false true;

 

Integer的相关源码

public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}

从源码可以看到

Integer在内部使用了一个私有的静态类IntegerCache,此类内部封装了一个Integer对象的cache数组来缓存Integer对象

private static class IntegerCache {
static final Integer cache[];
//……
}

IntegerCache内部的代码,会看到它使用静态初始化块在cache数组中保存了[-128,127]区间内的一共256Integer对象。

 

当给Integer变量直接赋整数值时,如果这个数值位于[-128,127]内,JVMJava Virtual Machine)就直接使用cache中缓存的Integer对象,否则,JVM会重新创建一个Integer对象。

由此可得知以上结果的原因了

但如果 Integer e = 100 ,f=new Integer(100) e==f 返回值就会问false了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics