在查看别人写的代码时,会发现有人会这样来写一个判断字符串是否为空的语句。
public boolean isEmpty(String str){
return str.equals(""); //感觉如何?
}
你有何感想?我的感想有一点,不太理解String这个类的实现。那么,最佳的使用方法是什么呢?我想,应该这样最好。
public boolean isEmpty(String str){
return str.length()==0; //不错吧
}
说原因之前,看看String的源码的实现。
方法length
public int length() {
return count;
}
方法equals
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
正如你看到的,lengh方法简单地返回对应字符长度的值,而equals则首先判断了是否为String的引用,然后判断了是否是String类型,创建空的数组,遍历循环等。
其结果导致,大多数情况下,前者性能表现比后者更好的性能。