空字符串验证

时间:2013-07-18 17:50:54

标签: java null string

我已阅读此SO帖子:Java, check whether a string is not null and not empty?

出现的问题(并未在该主题中回答)是:

Why is string.isEmpty() better than using string.equals("") ?在同一个答案中,海报指出,在J6之前,人们会使用string.length == 0作为检查空字符串的方法。我错过了一些东西,因为它们似乎都做了完全相同的事情......只需要美化你的代码。

6 个答案:

答案 0 :(得分:6)

最好用的是

"".equals(yourString) 

因为这可以避免空指针异常。

如果您使用

string.equals("") 

如果你的字符串为null,它将抛出一个空指针异常。

再次isEmpty的问题是

  

当且仅当length()为0

时,返回true

因此,如果您的字符串为空,它也会导致NPE。

答案 1 :(得分:4)

  

为什么string.isEmpty()比使用string.equals(“”)更好?

只需查看String#isEmpty()的来源:

public boolean isEmpty() {
    return count == 0;
}

它只返回将count变量存储为类的一部分与0的结果。没有繁重的计算。价值已经存在。

然而,String.equals()方法进行了大量计算,即类型转换引用比较长度比较 - {{ 3}}。因此,为了避免这些运行时操作,您只需使用isEmpty()来检查空字符串。 不过,这会有点慢一点。


注意: Oracle {7}的Java 7版本使用String.isEmpty(),因为它{{3} } value.length == 0count变量。但是,在 openjdk-7 中,它仍然使用offset变量。

但是,count计算会比value.length方法中的所有操作快一点。
除了性能差异,这实际上并不是很重要,如果差异很小,equals()方法似乎更清楚你的意图。所以,我更喜欢使用该方法来检查空字符串。

最后,当然,不相信你所看到的。只需使用这两种方法对您的代码进行基准测试,并查看是否有任何可衡量的差异。

答案 2 :(得分:3)

isEmpty()的号召更能表达您的意图,从而提高可读性。读者花更少的时间来理解你在检查背后的意图:不是认为你有兴趣检查字符串的相等性或确定它的长度,他们就会发现你想要知道的只是字符串是否为空。

没有性能差异,因为通过检查长度来实现isEmpty()

答案 3 :(得分:1)

卢卡斯说,一个人并不比另一个人好...... isEmpty更具可读性,仅此而已。没有显着的性能损失或类似的使用一个而不是另一个。

答案 4 :(得分:0)

有很多方法可以得到一个答案,一切都取决于编程语言以及如何编程。

例如C#:

 if (String.IsNullOrEmpty(s)) 
    return "is null or empty";

答案 5 :(得分:0)

使用apache commons提供的util方法

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isEmpty%28java.lang.String%29

如果您觉得自己甚至可以编写自己的isEmpty(String input)方法

这种方法具有以下优点   它使你的意图清晰   在空值的情况下你是安全的。