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

求解惑 == 与 equals ..谢了
Integer cc=1;
  Integer dd=1;  
  System.out.println(cc==dd); //true 
  System.out.println(cc.equals(dd));

  Integer aa=new Integer(1);
  Integer bb=new Integer(1);
  System.out.println(aa==bb); //false  
  System.out.println(aa.equals(bb)); //true

------解决方案--------------------
Integer cc=1;
Integer dd=1;
System.out.println(cc==dd); //true 比较的是地址
System.out.println(cc.equals(dd)); 比较的是内容

Integer aa=new Integer(1);
Integer bb=new Integer(1);
System.out.println(aa==bb); //false 比较的是地址
System.out.println(aa.equals(bb)); //true 比较的是内容
------解决方案--------------------
== 比较内存引用地址是否相等。
aa指向 一块内存地址 放置new Integer(1)这个Integer实例,该实例存在一个指向 1这个常量地址的引用。
bb指向 一块内存地址 放置new Integer(1)这个Integer实例,该实例存在一个指向 1这个常量地址的引用。
由于是new出来的,说 上面两个Integer实例内存地址不一样,就是aa,和bb指向的地址不一样
所以为false
而equals是比较 内容的,可以说最后1那个常量地址的比较。因为一个常量可以认为在内存中只有一块地址,所以equals相等。
Integer cc=1;
Integer dd=1;
这句
cc的内存地址含有1这个常量的地址。也就是cc指向 1常量的内存地址
dd的内存地址含有1这个常量的地址。也就是cc指向 1常量的内存地址
== 是比较内存地址的引用是不是一样的。
结果都是指向1这个个常量的,
所以==为true。