日常工作中,我们经常会用到如下代码片段来进行字符串比较 ,来判断内容是否相同;
private boolean equals(String a, String b){
return a == b || ( a != null && a.equals(b));
}
该实现能解决大部分情况下的字符串比对,但存在一部分极端情况,例如:入参a和b的对象较大;部分业务场景会要求对两个文件的内容进行比对,判断是否相同!
那么这种比对通过上述代码是否合适呢?
先看下equals的源码,得知它是通过比较字符串的每个字符,来确定两个对象是否相等的。如下所示!
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
为了验证字符串内容过大时的性能,我加入了其他两种方式来进行比对,将内容进行MD5或SHA1加密后再进行比较!
以下在内容大小不一的情况所产生的时间对比(运行十次的耗时结果&