日期:2014-05-20  浏览次数:20796 次

为什么int a=10 与Integer b=new Integer(10) 相等?
在我的理解中 int a=10 ,变量a与数值10都是放在栈中
 而Integer b=new Integer(10) 的引用对象b是放在栈中,Integer(10)是放在堆中。b对象指向堆中的Integer(10)
那为什么输出a==b为true啊? ==判断的是引用地址与内容相等 可是,变量a与引用对象b引用的地址不同啊

------解决方案--------------------
有个东西叫做:自动拆箱。
Java code

public static void main(String[] args) {
        int a = 10;
        Integer b = new Integer(10);
        System.out.println(a == b);//这里实际上是:a == b.intValue()
    }

------解决方案--------------------
比较的是a和b指向的地址中的值
------解决方案--------------------
jdk1.5之后吧,基本类型的所对应的引用类型可以自动转换成基本类型与基本类型进行值比较
------解决方案--------------------
int a=10;
Integer b = new Integer(10); //这句等价于 Integer b = new Integer(a);