我收到了关于我使用String.length()
的编码审核评论,以查看String是否等于""
,即不包含char。
我在代码中使用了String.length()==0
。
由于性能原因或其他原因,我不明白为什么推荐String.isEmpty()
?
答案 0 :(得分:2)
两者之间没有固有的差异,但出于以下原因,您可能应该依赖string.isEmpty();
而不是string.length() == 0
:
一般的经验法则:如果您提供了一种方法来做某事,请使用该方法而不是使用您自己的方法。
答案 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)
使用这两种方法中的任何一种都没有错 - isEmpty
和length
。他们都达到了同样的目标。如果您查看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实用程序方法: