我应该使用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(“”)大约一半的时间。
- 尝试使用AESencryption和解密string时发生IllegalBlockSizeException
- Spring vs EJB。 Spring可以取代EJB吗?
- 我如何让Selenium-WebDriver在Java中等待几秒钟?
- 我可以发现一个Java类声明的内部类使用reflection吗?
- JDK 8中的Javadoc:无效的“自闭元素不允许”
- 多态:为什么使用“List list = new ArrayList”而不是“ArrayList list = new ArrayList”?
- 为什么间接递增比直接公司更快?
- 差异com.sun.jersey和org.glassfish.jersey
- 进行循环优化