看了论坛很多区别int和integer的帖子,我们知道integer是int的包装类有人说Java虚拟机在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本类型的包装类对象和String对象
但是请看下面的代码:public class TeatString {
         Integer a=20;
Integer b=20;
int c=20;
Integer i1=200;
Integer i2=200;
Integer i3=new Integer(200);
int i4=200;
public  void test(){
                  System.out.println(a==b);
System.out.println(a==c);
System.out.println(i1==i2);
System.out.println(i1==i4);
System.out.println(i3==i4);
}
public static void main(String[] args) {
TeatString t=new TeatString();
t.test(); }}输出:
true
true
false
true
true有资料说integer只能包装了-128到127的数据,大于这个范围就要创建新的对象,
但是如果说integer a 在实例化时是在池,而int c是在栈,前者是对象后者是基本类型,为什么a==c?
如果说integer和int都是当做对象,i1,i3都新生成了对象,i1==i4,i3==i4怎么解释?

解决方案 »

  1.   

    我刚才研究了一下 Integer a = 20;
    Integer b = 20;现在的变量 a 和 b , 它们的指向的地址是一样的, 它们比较的也是地址, 所以是相等的. 我的总结是(够小的数,它们存在类似串池的一个容器中,如果在这个容器中能够找的到这个值,将这个地址赋给它,如果找不到,就新放进去一个).如果现在将 a++, 那么 a 的地址就变了, 这一切通过debug可以看的出来用 Integer 和 int 比较的时候, Integer会自动转成int来比值, 这个jdk新特性中的功能
      

  2.   

    是的。你如果用的是jdk1.5以下的版本的话,直接用Integer == int 是会出错的