java - 在字符串文字上调用 equals

标签 java string comparison

我只是稍微整理一下我的代码,就出现了这样一段:

String saving = getValue();
if(saving != null && saving.equals("true")){
   // do something
}

然后我想用另一种方式来摆脱对 null 的检查:

if("true".equals(saving)){
   // do something
}

它确实有效,但是这样做安全吗?我的意思是字符串文字存储在一个公共(public)池中,而 new 创建的字符串对象在堆上。但是常量池中的字符串也是对象吧?

但它似乎仍然不是正确的做法,即使它使代码更短。

最佳答案

为了确保对这个问题有一套完全平衡的答案,我想发表不同的意见。

我认为这种机制很愚蠢。

如果您有一个 null,您应该在它发生时立即知道 - 隐藏它只会推迟它的发现。如果 null 不是异常,则将其替换为其他内容。

采用这种方法将使用所谓的防御性编程来强化你的代码,在这种方法中你的错误尽快被发现,而不是在一切崩溃之前被掩盖。 p>

总之 - NullPointerException 是你的 friend 。您应该使用它来查找代码中的错误。一旦您确定 null > 也不异常(exception)。

出于习惯而使用尤达技术将不可避免地隐藏您不想隐藏的错误。 使用它会更早地暴露错误。对我来说,这足以证明永远不要使用它。

对我来说 - 使用

if(saving != null && saving.equals("true")){

表示我实际上希望允许 savingsnull 并且这是可以接受的情况 - 使用

if("true".equals(saving)){

只是以一种可能成为坏习惯的方式隐藏了深思熟虑的选择。

关于java - 在字符串文字上调用 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385179/

相关文章:

java - Android AsyncTask fragment 加载

android - 如何从 EditText 获取字符?

Python 替换列表中的字符

C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的

java - 在扩展 BaseAdapter 的 customAdapter 中实现 getFilter

java - 生成新索引时 SOLR master 中偶尔出现 SocketTimeoutException

java - 如何将spring bean注入(inject)spock测试

java - 将特定字符串映射到常量整数?

比较字符串出错

java - HashSet 'add'方法什么时候调用equals?