august 发表于 2007-9-30 13:57:25

问下JAVA的一点问题

String s1=new String("ab");
      String s2=new String("ab");
      System.out.println(s1.equals(s2));

equals()方法使用"=="运算符比较两个对象,这是两者相通之处,因此,s1.equals(s2)应该返回false.但,String类重载了继承Object类的equals(),所以 s1.equals(s2) 返回了true

这话该怎么理解呢?

shawind 发表于 2007-9-30 14:33:08

就是类方法的重载,String类是从Object类继承来的。

rednaxela 发表于 2007-9-30 14:40:54

Object.equals(Object)里确实是用"==",所以语义是判断实例是否为同一个.
一般如果要为一个类提供相等性的判断的话,都需要重写(override,不是重载,overload)这个equals(Object)方法,使它根据内部状态来判断两个实例的内容的"相等性".
String.equals(Object)是重写过的.

霸全勋章 发表于 2007-10-2 02:12:17

equals()方法使用"=="运算符比较两个对象,这是两者相通之处,因此,s1.equals(s2)应该返回false.但,String类重载了继承Object类的equals(),所以 s1.equals(s2) 返回了true

这话该怎么理解呢?
-------------------------------------
简单说
Object类下有方法equals()
String类继承Object类,并且也有一个equals()方法(同名同参)


如果
Object a=new Object;
a.equals(xxx);
就执行Object下的equals方法

如果
String a=new String;
a.equals(xxx);
就执行String下的equals方法
页: [1]
查看完整版本: 问下JAVA的一点问题