我应该使用string.isEmpty()或“”.equals(string)?

标题基本上说了这一切。 我通常一起testing这个string == null ,所以我并不真正担心一个空安全testing。 我应该用哪个?

 String s = /* whatever */; ... if (s == null || "".equals(s)) { // handle some edge case here } 

要么

 if (s == null || s.isEmpty()) { // handle some edge case here } 

在这个笔记 – 做isEmpty()甚至做任何事情,除了return this.equals("");return this.length() == 0;

"".equals(s)的主要好处是你不需要空检查( equals将检查它的参数,如果它为null,则返回false ),你似乎并不在乎。 如果你不担心s是null(或者是否检查它),我肯定会使用s.isEmpty() ; 它显示了你正在检查的内容,你关心的是否是空的,而不是它是否等于空string

String.equals("")实际上比只是一个isEmpty()调用慢一点。 string存储在构造函数中初始化的countvariables,因为string是不可变的。

isEmpty()比较countvariables为0,而equals将检查types,string长度,然后迭代string比较大小是否匹配。

所以要回答你的问题, isEmpty()实际上会less得多! 这是一件好事。

除了上面提到的其他问题之外,还有一件事情可能需要考虑: isEmpty()是在1.6中引入的,因此如果使用它,将无法在Java 1.5或更低版本上运行代码。

你可以使用apache commons的StringUtils isEmpty()或isNotEmpty()。

这并不重要。 "".equals(str)在我看来更加清晰。

isEmpty()返回count == 0 ;

我写了一个可以testing性能的testing程序类:

 public class Tester { public static void main(String[] args) { String text = ""; int loopCount = 10000000; long startTime, endTime, duration1, duration2; startTime = System.nanoTime(); for (int i = 0; i < loopCount; i++) { text.equals(""); } endTime = System.nanoTime(); duration1 = endTime - startTime; System.out.println(".equals(\"\") duration " +": \t" + duration1); startTime = System.nanoTime(); for (int i = 0; i < loopCount; i++) { text.isEmpty(); } endTime = System.nanoTime(); duration2 = endTime - startTime; System.out.println(".isEmpty() duration "+": \t\t" + duration2); System.out.println("isEmpty() to equals(\"\") ratio: " + ((float)duration2 / (float)duration1)); } } 

我发现使用.isEmpty()占用了.equals(“”)大约一半的时间。