[转载]一个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的
----------------解决方案--------------------------------------------------------
怎么反编译啊
小问一下
----------------解决方案--------------------------------------------------------