[java中判断字符串是否为数字的三种方法 1>用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Charact
Java 判断字符串是否为空的三种方法与性能分析
Java编程过程中经常会涉及到判断空字符串的问题,对于我而言经常使用的是equals()方法,代码如下:
if(target != null && !"".equals(target)){
System.out.println("target字符串不为空");
}
碰巧昨天见到一篇关于判断Java空字符串三种方法的比较,突然觉得自己在平时里做的还不够深入,没有对代码的性能进行极致优化,自己要反思与提高。
原文提到的三种方法分别是:我使用的equals()、length()和JDK6之后的 isEmpty(),在性能上原文分析结果是equals()性能几乎是length()的3.5倍,这个我不敢苟同,我实际测试的结果如下:
equals use time: 110ms
length use time: 78ms[以下是 Java 判断字符串是否为空的三种方法. 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.方法二: 比较字符串长度, 效率高. 方法三: Java SE 6.0 才开始提供的
还没到2倍,于是乎我查看了String的源码:
public int length() {
return count;
}
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;
}
}
通过源码我很容易发现length()的效率要高于equals(),length()直接返回String对象的Count属性,而equals()需要先进行判断目标比对对象的类型,然后再进行其它操作,同时还要遍历String对象的每一个char,查看是否相同。
同时原文提到的JDK6提供的String .isEmpty()方法我没有安装JDK6,所以只能替代行的查看了Commons-lang-2.6内StriingUtils的该方法,我相信JDK6的源码与它应该是相同的,源码如下:
public static boolean isEmpty(String str)
{
return (str == null) || (str.length() == 0);
}
可见isEmpty()同样也使用了length()方法,呵呵~只能说apache不傻。
综上我们可以清晰的得出三者性能上的优劣。equals() <