Topic: 关于 == 和 equal()的区别

  Print this page

1.关于 == 和 equal()的区别 Copy to clipboard
Posted by: constantin
Posted on: 2007-09-28 13:01

看书说, equal()只能用来比较object, ==只能用来比较Primitive value 和 reference.
可是我比较不明白的是,我们在许多code里看到

Double d1=new Double("3.0");
Integer i1=new Integer(3);
if(d1.equals(i1)){
System.out.println("wrapsareequal");
}

这里的d1, 和i1不是 double, integer object 的reference,为什么用equals 去比较呢?

2.Re:关于 == 和 equal()的区别 [Re: constantin] Copy to clipboard
Posted by: andy_wang_5
Posted on: 2007-09-28 18:12

==用来比较内存地址是否相等:

String a = "123";
String b = "123";
a == b // true

String 类的不可变的,a和b会指向同一内存地址,所以返回true


String a = new String("abc");
String b = new String("abc");
a == b // false

因为用new创建了两个对象,所以a和b指向两个不同的内存地址,所以返回false

equal()是object的方法,所以只适用于对象,不使用于基本类型。
不过equal()默认是用“==”比较两个对象的内存地址,如果想比较两个对性的内容,要重写equal()方法才可以
String的equal()方法是这样重写的

public boolean equals(Object anObject) {
  if (this == anObject) {
   return true;
  }
  if (anObject instanceof String) {
   String anotherString = (String)anObject;
   int n = count;
   if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
     if (v1[i++] != v2[j++])
      return false;
    }
    return true;
   }
  }
  return false;
}


至于书上写的“==只能用来比较Primitive value 和 reference.”是不对的,==可以用来比较基本类型(Primitive)也可以用来比较对象。reference是作为对象的句柄使用的。不知道作者为什么这样说。

顺便问一句:你看得什么书?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923