2008-03-20
java的Integer比较果然很妖
首先:
原因:
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3。在jdk源码中
而
这边是java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
再加一句
Integer a = 100;
a++;
//这边a++是新创建了一个对象,不是以前的对象。
打印就是false
对于127--128没有多大关系,但是在这范围之外就影响性能了吧
public static void main(String []args) {
Integer a = 100;
Integer b = 100;
System.out.println(a==b); //true
}
public static void main(String []args) {
Integer a = 200;
Integer b = 200;
System.out.println(a==b); //false
}
原因:
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3。在jdk源码中
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
而
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache = new Integer(i - 128);
}
}
这边是java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
再加一句
Integer a = 100;
a++;
//这边a++是新创建了一个对象,不是以前的对象。
public static void main(String []args) {
Integer a = 100;
Integer b = a;
a++;
System.out.println(a==b);
}
打印就是false
对于127--128没有多大关系,但是在这范围之外就影响性能了吧
评论
sophia_230
2008-03-20
比较方法确实很奇怪
movingboy
2008-03-20
JDK初始化了127--128并不意味着可以在两个Integer之间使用==进行比较,是你自己要这样用
- 浏览: 9183 次
- 性别:

- 来自: 上海虹口区

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
精辟的String与StringBuff ...
wangsong76 写道 public class testS ...
-- by n5281407 -
精辟的String与StringBuff ...
public class testStringStringBu ...
-- by wangsong76 -
精辟的String与StringBuff ...
janmy 写道3:String 与StringBuffer的区别 Stri ...
-- by virusswb -
很好的EXT中文网站
dojochina 应该改为 extjschina ?!
-- by fangzhouxing -
很好的EXT中文网站
非常不错的学习网站!感觉javaeye的ext圈子还是没有发展起来的样子。可看的 ...
-- by spiritfrog






评论排行榜