String.equals源码详解
2019-07-05 本文已影响0人
small瓜瓜
作为一名java
程序员,在学习java
基本功时,应该都遇到过这样一个事情,就是字符串的比较。很多人刚开始的时候总是习惯性的使用==
符号来判断,但是这是不对的,因为==
比较的是对象的内存地址。推荐做法是用String.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;
}
代码量是很少的,那我们来看看它具体做了什么。
- 首先通过
if (this == anObject)
判断是不是两个对象内存地址是不是一样,一样说明是同一个对象。
到这里可以知道单用判断是不准确的,但是有些时候也是可以判断的。
具体什么时候可以判断,可以参考下面这篇博客:java String创建字符串对象 - 然后就是
if (anObject instanceof String)
判断anObject
是不是String
类型。如果是则再进行判断,不是直接返回false
- 如果是,则首先将
anObject
转为String
类型。然后先比较String
的value
字段的长度是否一样。 - 如果长度一样则通过
while
循环判断两个String
对象的value
数组中的每一个字符是不是相同的
最后啰嗦一句,一定要养成看源代码的习惯。看好代码,学好程序,过好人生