让我先从示例代码开始...
String password = "";
if("PIRATE".equals(password)) {
// Do something
}
请参阅此处,字符串常量或文字(无论什么("海盗"用于检查两个字符串的相等性。而。。。
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(password)
不能导致NullPointerException
。
而
如果碰巧null
password
,password.equals("PIRATE")
会抛出NullPointerException
.
因此,鼓励使用前者 :它更安全。
当你写password.equals("PIRATE")
时,你几乎是在要求一个NullPointerException
,在那里password
可能会null.
这一切都是为了避免NullPointerException
.
if("PIRATE".equals(password)) {
// Do something
}
避免NullPointerException
其中作为
if(password.equals("PIRATE")) {
// Do something
}
你NullPointerException
password
是否null
.
但是,我个人觉得这在代码中间看起来很奇怪。 而且我总是喜欢写
if(password !=null && password.equals("PIRATE") ){
//do something
}
唯一的缺点是风格问题。说"海盗".equals(密码(被称为尤达条件。但是,正如人们已经说过的那样,使用这种条件更安全(所以我会继续使用那种(。