问下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
这话该怎么理解呢? 就是类方法的重载,String类是从Object类继承来的。 Object.equals(Object)里确实是用"==",所以语义是判断实例是否为同一个.
一般如果要为一个类提供相等性的判断的话,都需要重写(override,不是重载,overload)这个equals(Object)方法,使它根据内部状态来判断两个实例的内容的"相等性".
String.equals(Object)是重写过的. 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]