始终使用length()而不是equals()检查空字符串

在日常编程活动中,您必须遇到多种情况,需要检查字符串是否为空。有多种方法可以执行此操作,有些使用string1.equals(“”)。永远不要这样做

检查string是否为空的最好方法是使用length()方法。此方法仅返回构成字符串的char数组内的字符数。如果计数或长度为0;您可以确定该字符串为空。

公共布尔isEmpty(String str)
{
    返回str.equals(“”);       //永远不要这样做
}

公共布尔isEmpty(String str)
{
    返回str.length()== 0;       //检查空的正确方法 
}

如果您想知道原因,请继续阅读。

让我们看一下String.java类中这两个方法的源代码。

方法长度()

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;
}

分析

如您所见,length()方法只是一个getter方法,它返回数组中的字符数。因此,计算字符串的长度实际上不会浪费太多的CPU周期。并且任何长度为0的String总是空字符串。

而equals()方法在得出该字符串为空之前需要执行很多语句。它会进行引用检查,必要时进行类型转换,创建临时数组,然后再使用while循环。因此,它浪费了大量的CPU周期来验证简单条件。

如果您有其他意见,请告诉我。

更新:从Java 6开始,String类本身提供了isEmpty()函数。请直接使用此功能。

学习愉快!

saigon has written 1440 articles

Leave a Reply