我已经阅读了这个 SO 线程:Java,检查字符串是否不为空且不为空?
出现的问题(并且在该线程中没有得到回答)是:
Why is string.isEmpty() better than using string.equals("") ?
在同一个答案中,发帖人指出,在 J6 之前,人们会使用string.length == 0
它来检查空字符串。我是否遗漏了什么,因为它们似乎都在做完全相同的事情......这只是美化代码的问题。
我已经阅读了这个 SO 线程:Java,检查字符串是否不为空且不为空?
出现的问题(并且在该线程中没有得到回答)是:
Why is string.isEmpty() better than using string.equals("") ?
在同一个答案中,发帖人指出,在 J6 之前,人们会使用string.length == 0
它来检查空字符串。我是否遗漏了什么,因为它们似乎都在做完全相同的事情......这只是美化代码的问题。
最好用的是
"".equals(yourString)
因为这避免了空指针异常。
如果你使用
string.equals("")
如果你的字符串为空,它会抛出一个空指针异常。
再一次的问题isEmpty
是
当且仅当 length() 为 0 时返回 true
因此,如果您的字符串为空,也会导致 NPE。
为什么 string.isEmpty() 比使用 string.equals("") 更好?
只看来源String#isEmpty()
:
public boolean isEmpty() {
return count == 0;
}
它只是返回将count
作为类的一部分存储的变量与0
. 没有繁重的计算。价值已经存在。
然而,该String.equals()
方法进行了大量计算,即类型转换、参考比较、长度比较-String#equals(Object)
源代码。因此,为了避免这些运行时操作,您可以简单地使用isEmpty()
来检查空字符串。不过,这会慢一分钟。
注意: Oracle Java 7 版本String.isEmpty()
使用,value.length == 0
因为它不再存储count
andoffset
变量。但是在openjdk-7中,它仍然使用count
那里的变量。
但是,value.length
计算仍然会比equals()
方法中的所有这些操作快一点。
除了性能差异(实际上并不太关心)以及差异(如果有的话)之外,该String.isEmpty()
方法似乎更清楚您的意图。因此,我更喜欢使用该方法来检查空字符串。
最后,当然,不要相信你所看到的。只需使用这两种方法对您的代码进行基准测试,并查看是否有任何可测量的差异(如果有)。
的调用isEmpty()
更好地表达了你的意图,从而提高了可读性。读者花费更少的时间来理解您在检查背后的意图:与其认为您对检查字符串的相等性或确定其长度感兴趣,他们会看到您想知道的只是字符串是否为空。
没有性能差异,这isEmpty()
是通过检查长度来实现的。
正如卢卡斯所说,一个并不比另一个好...... isEmpty 更具可读性,仅此而已。使用一个在另一个上没有显着的性能损失或类似的东西。
有很多方法可以得到一个答案,一切都取决于编程语言以及如何编程。
例如在 C# 中:
if (String.IsNullOrEmpty(s))
return "is null or empty";
使用apache commons提供的util方法
如果你觉得你甚至可以编写自己的 isEmpty(String input) 方法
这种方法具有以下优点它使您的意图明确在空值的情况下您是安全的。