6

让我首先从一个示例代码开始......

String password = "";

if("PIRATE".equals(password)) {
     // Do something
}

请参阅此处,字符串常量或文字(无论如何)“PIRATE”用于检查两个字符串的相等性。然而...

String password = "";
if(password.equals("PIRATE")) {
     // Do something
}

这也与前面的代码完全一样。

现在,我看到很多第一种样式"STRING_LITERAL".equals(STRING_OBJECT),而 Java 人员发布代码。

所以我的问题是,这种风格从何而来?是否比第二种风格更好?

事实上,我发现第二种风格比第一种更合乎逻辑,为什么?!

让我们提出一个要求,如果用户提供的密码等于“海盗”,那么授予该用户权限

当您开始实施上述要求时,

String userProvidedPassword = getPaswordFromUser();

if(userProvidedPassword.equals("PIRATE")) {
 // Allow him
}

这不比"PIRATE".equals(userProvidedPassword);更合乎逻辑吗??!考虑一下...

如果我错了,请纠正我..谢谢..


编辑:对不起,这个问题在我之前的搜索中没有出现,它完美地回答了我的问题。也感谢所有在这里提供帮助的人..

4

3 回答 3

17

"PIRATE".equals(password)不能导致NullPointerException.

然而

password.equals("PIRATE")将抛出一个NullPointerExceptionifpassword恰好是null

因此鼓励使用前者:它更安全。

于 2013-07-23T13:05:45.913 回答
9

当你写作时, 你password.equals("PIRATE")几乎是在要求一个NullPointerException有机会的地方passwordnull.

一切都是为了避免NullPointerException

if("PIRATE".equals(password)) {
     // Do something
}

避免NullPointerException

然而

if(password.equals("PIRATE")) {
     // Do something
}

thrwos 你 NullPointerException 如果passwordnull

但是,我个人觉得这在代码中间看起来很奇怪。我总是喜欢写作

if(password !=null && password.equals("PIRATE") ){

//do something 

}
于 2013-07-23T13:06:16.127 回答
3

唯一的缺点是风格问题。说 "PIRATE".equals(password) 称为Yoda Condition。但是,正如人们已经说过的那样,使用这种条件更安全(所以我会继续使用那种)。

于 2013-07-23T13:17:41.163 回答