为什么使用String.isEmpty()来检查String是否为空是否为String.length()方法?

时间:2017-06-14 15:26:17

标签: java string

我收到了关于我使用String.length()的编码审核评论,以查看String是否等于"",即不包含char。

我在代码中使用了String.length()==0

由于性能原因或其他原因,我不明白为什么推荐String.isEmpty()

5 个答案:

答案 0 :(得分:2)

两者之间没有固有的差异,但出于以下原因,您可能应该依赖string.isEmpty();而不是string.length() == 0

  • 它更小,占用更少的空间。
  • 它看起来更干净,客观。
  • 如果Java内部的某些内容发生变化,会更改String空白的检查方式,则无需切换到新系统即可获得该更新。

一般的经验法则:如果您提供了一种方法来做某事,请使用该方法而不是使用您自己的方法。

答案 1 :(得分:2)

两者都代表相同的信息,但String#isEmpty提高了代码的可读性......

请考虑以下代码段:

String foo = "";
if (foo.isEmpty()) {
    // TODO
}
if (foo.length() == 0) {
    // TODO
}

isEmpty的意图比长度检查更不明确.... 对代码的进一步修改将更容易,而且我们通常不做

foo.length() == 0    //because 0 is a magic number

foo.length() == SOME_CONSTANT

同样的标准也用于收藏品,你会看到

if(myList.isEmpty())

而不是

if(myList.size() == 0)

答案 2 :(得分:0)

根据oracle java api https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#isEmpty--

public boolean isEmpty()

当且仅当length()为0时,返回true。 返回:如果length()为0,则返回true,否则返回false

没有区别。

答案 3 :(得分:0)

使用这两种方法中的任何一种都没有错 - isEmptylength。他们都达到了同样的目标。如果您查看String课程中这两种方法的source code,您会看到以下内容:

public int length() {
    return value.length;
}

public boolean isEmpty() {
     return value.length == 0;
}

如您所见,它们都引用了一个内部变量value,它被定义为一个字符数组。

private final char value[];

因此,您可以使用这两种方法中的任何一种来检查空字符串。有人可能会说isEmpty的可读性比length更好。

在调用这两种方法中的任何一种之前,不要忘记进行空检查。

答案 4 :(得分:0)

String isEmpty内部以这种方式实施

public boolean isEmpty() {
    return value.length == 0;
}

所以,没有任何差异而不是可读性。

但是,通常还需要检查字符串变量是否等于null(案例1)。或者,如果字符串变量仅包含空格(情况2)。在这种情况下,最好使用Apache Commons实用程序方法:

案例1的

StringUtils#isEmpty

案例2的

StringUtils#isBlank