首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

真是挺蛋痛的java比较符号

2012-08-24 
真是挺蛋疼的java比较符号public static void main(String[] args) ?? { ???? int a 1000, b 1000 ??

真是挺蛋疼的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]区间内的一共256个Integer对象。

?

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

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

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

热点排行