我注意到调用equals("");类的方法不会产生任何错误Eclipse.我从来没有见过.equals没有像string1.equals(string2);.
package voodoo;
public class Equals {
public void method(){
equals("");
}
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,什么时候会equals()自己调用?
如果我把它放入JUnit测试中,它会运行并通过.
das*_*ght 16
equals您呼叫IS Object的equals方法,它可以在被称为this参考而不显式指定它.换句话说,你的电话相当于
this.equals("");
Run Code Online (Sandbox Code Playgroud)
这是完全有效的,尽管一个表现良好的实现必须始终返回false.请注意,忽略返回值,这也是合法的.
equals作为一个实验问题,您可以通过覆盖打印消息的内容来查看正在发生的事情:
public class Equals {
public void method(){
equals("");
}
@Override
public boolean equals(Object other) {
System.out.println("I am being compared to '"+other+"'");
return super.equals(other);
}
}
Run Code Online (Sandbox Code Playgroud)
equals是非静态的,它调用equals的Object类似于调用类的任何其他方法.而且,我们班是孩子的Object.方法调用类似于thisObject.equals(emptyString)注释,这里String也是一个Object.所以,最终我们正在调用currntObject.equals(object)来自孩子的方法Object.
它类似于,
class A {
public boolean ok(Object str) {
return false;
}
}
class B extends A {
public void method(){
ok("");
}
}
Run Code Online (Sandbox Code Playgroud)
这里的孩子还没有重写的equals话,它会调用的方法它的父,它会参照当前实例.
因为一切都是Object类的子类,所以你在这里调用超类(Object)equals方法.它接收Object作为参数,其中""是一个字符串对象,它编译得很好.
它boolean实际上会返回,但是你忽略了接收它.忽略结果是合法的.
如果你收到它并检查,那就返回,false因为你的Equals类不等于空字符串.
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |