我发现了一些代码上发表了一个Eclipse大师Eclipse站点:Java的equals方法 - 无操作员,无操作数 - 如果(等于(空))
String something = null ;
if (equals(null)) {
System.out.println("b'");
}
它编译。但它似乎并没有运行。
什么样的 java代码是这样的吗?
我发现了一些代码上发表了一个Eclipse大师Eclipse站点:Java的equals方法 - 无操作员,无操作数 - 如果(等于(空))
String something = null ;
if (equals(null)) {
System.out.println("b'");
}
它编译。但它似乎并没有运行。
什么样的 java代码是这样的吗?
equals()
是Object
类中声明的普通方法。
与您的类或基类中的任何其他方法一样,您可以使用操作数在this
上调用它。
equals()
相当于this.equals()
。
调用equals(null)
永远不会返回true,因为您无法调用null
实例上的方法。
它确实运行,但它可能并不明显!给下面的代码一试:
if (equals(null)) {
System.out.println("b");
}
else {
System.out.println("c");
}
有了这个代码,你应该看到在你的标准输出信c
。
equals(Object obj)
是在Object
类中声明的方法。
equals(someObject)
相当于this.equals(someObject)
。
equals(obj)
的API契约是:
“true
如果this
对象是相同obj
参数;否则返回false。”
在您的示例代码中,obj
不是this
对象,而是null
。因此,if
子句的计算结果为false
,因此正在执行的虚拟机将不会评估System.out.println("b");
。
代码将不会编译,除非您在类中有equals方法或者已经完成某个包含equals方法的类的静态导入,或者此代码是在类中的非静态方法中编写的。 除了占用堆栈空间和吃点cpu时间之外,我没有看到这段代码的任何用法 –
@AbhijithNagarajan:那是永远是真的。 – SLaks