String.isEmpty() 和 String.equals(“”) 之间的区别

2022-09-02 00:04:08

我创建了一个带有三个文本框的“颜色选择器”,用户在其中定义rgb值。
要检查输入的值是否正确(仅限0-255之间的数字),我使用以下方法:

public Color getColor() {
    if (tfRed.getText().equals("") || tfGreen.getText().equals("") || tfBlue.getText().equals("")) {
                return new Color(0, 0, 0, 0);
    } else {
        if (tfRed.getText().matches("\\d+") && tfGreen.getText().matches("\\d+") && tfBlue.getText().matches("\\d+")) {
            // ...
        } else {
            return new Color(0, 0, 0, 0);
        }
    }
}

我要问的是:使用更好吗?我从来没有找到一个令人满意的答案,我一直想知道是否有任何区别。String.isEmpty()


答案 1

我认为效率更高一些。但是,智能编译器无论如何都可以优化调用。来自 OpenJDK 源代码isEmpty()equals("")

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

 1013     public boolean equals(Object anObject) {
 1014         if (this == anObject) {
 1015             return true;
 1016         }
 1017         if (anObject instanceof String) {
 1018             String anotherString = (String)anObject;
 1019             int n = count;
 1020             if (n == anotherString.count) {
 1021                 char v1[] = value;
 1022                 char v2[] = anotherString.value;
 1023                 int i = offset;
 1024                 int j = anotherString.offset;
 1025                 while (n-- != 0) {
 1026                     if (v1[i++] != v2[j++])
 1027                         return false;
 1028                 }
 1029                 return true;
 1030             }
 1031         }
 1032         return false;
 1033     }

这里关于是否使用或的答案也是正确的:str.isEmpty()"".equals(str)

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


答案 2

是的,请使用 .它更干净(语义上)(性能也略好,但那将不明显)如果实例可以为空,请使用commons-langString.isEmpty()StringUtils.isEmpty(string)