2013-10-17 35 views
1

我发现了一些代码上发表了一个Eclipse大师Eclipse站点:Java的equals方法 - 无操作员,无操作数 - 如果(等于(空))

String something = null ;  
if (equals(null)) { 
    System.out.println("b'"); 
} 

它编译。但它似乎并没有运行。

什么样的 java代码是这样的吗?

+0

代码将不会编译,除非您在类中有equals方法或者已经完成某个包含equals方法的类的静态导入,或者此代码是在类中的非静态方法中编写的。 除了占用堆栈空间和吃点cpu时间之外,我没有看到这段代码的任何用法 –

+0

@AbhijithNagarajan:那是永远是真的。 – SLaks

回答

1

equals()Object类中声明的普通方法。

与您的类或基类中的任何其他方法一样,您可以使用操作数在this上调用它。
equals()相当于this.equals()

调用equals(null)永远不会返回true,因为您无法调用null实例上的方法。

0

它确实运行,但它可能并不明显!给下面的代码一试:

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");