首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在字符串文本上调用equals

在字符串文本上调用equals
EN

Stack Overflow用户
提问于 2013-12-05 04:24:53
回答 8查看 16.9K关注 0票数 25

我只是整理了一下我的代码,有一段:

代码语言:javascript
复制
String saving = getValue();
if(saving != null && saving.equals("true")){
   // do something
}

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

代码语言:javascript
复制
if("true".equals(saving)){
   // do something
}

它肯定可以工作,但是这样做是安全的吗?我的意思是,字符串文字存储在一个公共池中,而由new创建的字符串对象存储在堆中。但是常量池中的字符串也是对象,对吧?

但这看起来仍然不是正确的做法,即使它使代码更短。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-12-05 04:28:25

这是安全的-正如你所看到的,这是避免空指针的好方法。

您提到了对字符串使用new。许多java静态代码分析工具建议始终使用文本而不是new String("foo");

编辑:

如果你愿意,你甚至可以使用:

代码语言:javascript
复制
if (Boolean.valueOf(saving)) {
    ...
}

根据docs,传递null将返回false

票数 25
EN

Stack Overflow用户

发布于 2013-12-05 07:58:52

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

我认为这种机制是愚蠢的。

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

采用这种方法将使用所谓的防御性编程来加强您的代码,在这种编程中,您的错误会被尽快发现,而不是一直掩盖到一切崩溃。

总之-- NullPointerException是你的朋友。您应该使用它来查找代码中的错误。一旦您确定null不是异常,使用诸如Collections.emptySet()之类的空对象是非常容易的。

出于习惯使用Yoda技术将不可避免地隐藏您不想隐藏的错误。而不是使用它将会更早地暴露错误。对我来说,这是不使用它的充分理由-永远不会。

对我来说-使用

代码语言:javascript
复制
if(saving != null && saving.equals("true")){

意味着我实际上希望允许savingsnull,这是可以接受的情况--使用

代码语言:javascript
复制
if("true".equals(saving)){

只是以一种可能成为坏习惯的方式隐藏了这种刻意的选择。

票数 27
EN

Stack Overflow用户

发布于 2013-12-11 21:57:29

我不同意其中一些答案。有时你do想知道你的变量是否为null。这可能表明您的代码中发生了一些不好的事情,您可能需要重新考虑您的逻辑。

我不喜欢做if ("someString".equals(myString));,因为我 do 想知道myString是否是null,也许可以处理它,或者改变我的逻辑以防止类似的情况。

假设你有一个对象数组,由于一些bug而计算错误:

代码语言:javascript
复制
myStrings = {..., ..., null, null, ...};

然后,您需要在数组的对象上执行一些操作,您将拥有:

代码语言:javascript
复制
if ("myString".equals(myObjArray[i])) { ... } 

您不会得到NullPointerException,并且您可能认为您在数组中的所有对象上执行了该操作,并且您永远不会知道您错误地计算了它,因为您隐藏了异常。然而,如果你有:

代码语言:javascript
复制
if (myObjArray[i].equals("myString")) { ... } 

您将得到一个NPE,您将知道数组中有问题,您可能希望修复它或以另一种方式处理它。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20385179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档