Java - 编码风格:"ABC".equals("SOMESTRING")样式字符串比较的优缺点是什么?



让我先从示例代码开始...

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 passwordpassword.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(密码(被称为尤达条件。但是,正如人们已经说过的那样,使用这种条件更安全(所以我会继续使用那种(。

最新更新