当前位置: 代码迷 >> Java相关 >> [转载]一个Integer的问题
  详细解决方案

[转载]一个Integer的问题

热度:350   发布时间:2007-04-08 22:22:40.0
[转载]一个Integer的问题

import java.io.*;

class Y{
public static void main(String []args){
Integer a = 200;
Integer b = 200;
if(a==b)
System.out.println("true");
else
System.out.println("false");
}
}
结果是
false

当改成a=100,b=100的时候为什么是true
==这个不是只是否是同一对象吗?在里面明显a跟b不是一个东西!

搜索更多相关的解决方案: Integer  

----------------解决方案--------------------------------------------------------
127 128 是个界限
----------------解决方案--------------------------------------------------------
麻烦说出原因,谢谢。。。
----------------解决方案--------------------------------------------------------
看看<JAVA Language Specification>或者把上面的代码编译后再反编译一下就知道怎么回事了.
程序代码:

Integer a = 200;
Integer b = 200;

等价于:
程序代码:

Integer a =Integer.valueOf(200);
Integer b =Integer.valueOf(200);


而valueOf的源代码是:
程序代码:

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);
}

可以看出,当i属于[-128,127]时,得到的是cache中的预先设好的值,所以i一样,Integer.valueOf(i)也是一样;
而其余情况会得到一个new Integer(i),当然不同了.
----------------解决方案--------------------------------------------------------
高手,谢谢了~~
----------------解决方案--------------------------------------------------------
呵呵,不客气~

----------------解决方案--------------------------------------------------------
楼上,能不能再讲清楚一下.
----------------解决方案--------------------------------------------------------
呵呵,还有如何清楚,Eastsun已经讲得非常清楚了

连源代码都附出来了
----------------解决方案--------------------------------------------------------
Eastsun应该给他带上
Integer a = new Integer(100);
Integer b = new Integer(100);
a==b为FALSE的

----------------解决方案--------------------------------------------------------
怎么反编译啊
小问一下
----------------解决方案--------------------------------------------------------
  相关解决方案