我只是稍微整理一下我的代码,就出现了这样一段:
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")){
表示我实际上希望允许 savings
为 null
并且这是可以接受的情况 - 使用
if("true".equals(saving)){
只是以一种可能成为坏习惯的方式隐藏了深思熟虑的选择。
关于java - 在字符串文字上调用 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385179/