调用等于("");自己编译运行
Calling equals(""); by itself compiles and runs
我注意到在 class 的方法中调用 equals("");
不会在 Eclipse
中产生任何错误。我从来没有见过 .equals 调用时没有像 string1.equals(string2);
.
这样的东西
package voodoo;
public class Equals {
public void method(){
equals("");
}
}
这是怎么回事,什么时候可以单独调用 equals()
?
如果我将其放入 JUnit
中进行测试,它会运行并通过。
因为所有东西都是 Object class 的 subclass,这里你调用 super class (Object) equals 方法。它接收 Object 作为参数,其中 ""
是一个字符串对象,它编译得很好。
其实是returnsboolean
,只是你忽略了它才收到。忽略结果是合法的。
如果您收到并检查,returns false
因为您的 Equals
class 不等于空字符串。
equals
是 non-static,它正在调用 Object
的 equals
,这类似于调用 class 的任何其他方法。而且,我们的class是Object
的child。方法调用类似于 thisObject.equals(emptyString)
注意这里 String
也是一个 Object
。因此,最终我们从 Object
的 child 调用 currntObject.equals(object)
方法。
类似于,
class A {
public boolean ok(Object str) {
return false;
}
}
class B extends A {
public void method(){
ok("");
}
}
这里child没有覆盖equals
所以,它会调用parent的方法,它会引用当前实例。
您正在调用的 equals
是 Object
的 equals
方法,可以在 this
引用上调用它而无需明确指定它。也就是说,你的调用相当于
this.equals("");
这是完全有效的,尽管行为良好的实施必须始终 return false
。请注意,return 值被忽略,这也是合法的。
你可以通过用打印消息的东西覆盖 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);
}
}
equals(...)
没有显式对象调用 this
上的方法。在您的示例中,您将 Equals
的实例与空字符串进行比较。
equals()
public 方法位于 Object
class。所有 class 默认情况下是 Object
class 的 direct/indirect 个子 class。您的 Equals
class 没有明确继承任何 class。所以它是 Object
的直接子 class。
在对象 class 中,方法 equals()
是这样声明的 -
public boolean equals(Object obj){}
所以你的代码是完全有效的。您实际上是在 method()
呼叫 Equals.equals()
。
我注意到在 class 的方法中调用 equals("");
不会在 Eclipse
中产生任何错误。我从来没有见过 .equals 调用时没有像 string1.equals(string2);
.
package voodoo;
public class Equals {
public void method(){
equals("");
}
}
这是怎么回事,什么时候可以单独调用 equals()
?
如果我将其放入 JUnit
中进行测试,它会运行并通过。
因为所有东西都是 Object class 的 subclass,这里你调用 super class (Object) equals 方法。它接收 Object 作为参数,其中 ""
是一个字符串对象,它编译得很好。
其实是returnsboolean
,只是你忽略了它才收到。忽略结果是合法的。
如果您收到并检查,returns false
因为您的 Equals
class 不等于空字符串。
equals
是 non-static,它正在调用 Object
的 equals
,这类似于调用 class 的任何其他方法。而且,我们的class是Object
的child。方法调用类似于 thisObject.equals(emptyString)
注意这里 String
也是一个 Object
。因此,最终我们从 Object
的 child 调用 currntObject.equals(object)
方法。
类似于,
class A {
public boolean ok(Object str) {
return false;
}
}
class B extends A {
public void method(){
ok("");
}
}
这里child没有覆盖equals
所以,它会调用parent的方法,它会引用当前实例。
equals
是 Object
的 equals
方法,可以在 this
引用上调用它而无需明确指定它。也就是说,你的调用相当于
this.equals("");
这是完全有效的,尽管行为良好的实施必须始终 return false
。请注意,return 值被忽略,这也是合法的。
你可以通过用打印消息的东西覆盖 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);
}
}
equals(...)
没有显式对象调用 this
上的方法。在您的示例中,您将 Equals
的实例与空字符串进行比较。
equals()
public 方法位于 Object
class。所有 class 默认情况下是 Object
class 的 direct/indirect 个子 class。您的 Equals
class 没有明确继承任何 class。所以它是 Object
的直接子 class。
在对象 class 中,方法 equals()
是这样声明的 -
public boolean equals(Object obj){}
所以你的代码是完全有效的。您实际上是在 method()
呼叫 Equals.equals()
。