【代码】
Integer integer = new Integer(47);
int integer1 = 47;
System.out.println(integer == integer1); //true

Integer integer2 = new Integer(47);
Integer integer3 = new Integer(47);
System.out.println(integer2 == integer3); //false
【问题】
如上所述,对象的存储是在堆中,
第二个示例中两个都new了对象,所以引用地址不同,为false;那第一个示例中两个不在同一个存储区域,相比较为什么为true?难道跨区域比软了?
现在对值的存储有点迷茫了,求各位指点迷津...
存储java对象

解决方案 »

  1.   

    对象的值比较 使用对象的equal方法
      

  2.   

    Number类会自动封箱和拆箱。所以会相等
      

  3.   

    Boolean和Character也有同样的效果。
      

  4.   

    我觉得这种真心没必要多纠结了,懂了==和equals区别大多数情况就行了,要深入了解需要看虚拟机方面的东西
      

  5.   

    ==:
    比较的是一个对象在内存中的地址值,比如2个字符串对象String s1 = new String("str");String s2 = new String("str");如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
    equals:
    对值的比较
      

  6.   

    应该都是相等的,Integer比较时会拆箱
      

  7.   

    要想了解更深入,可以看看《深入理解JVM》的书,这里对JVM的原理讲解比较深入
      

  8.   

    你可以这样理解
    Integer integer = new Integer(47);
    创建两个对象
    1.new  Integer();
    2.定义一个integer变量,Integer integer=47;
      

  9.   

    JDK1.5版本及以上的版本,会对基础类型的封装类型自动拆装箱的。