public boolean equals(Object anObject)
将此字符串与指定对象进行比较。 如果且仅当参数不是null
且是表示与该对象相同的字符序列的String
对象时,结果为true
。
打开String.java
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
打开Object.java
public boolean equals(Object obj) {
return (this == obj);
}
在Object类的equals方法的本质其实是和“==”一样的,都是比较两个对象引用是否指向同一个对象(即两个对象是否为同一对象),而String类继承Object类之后,也继承了equals方法,并进行了重写。在String类中,先对参数进行了判断,是否为String类,并根据结果对参数进行了强制类型转换。而后根据编码类型利用三元表达式分别进入了StringLatin1类与StringUTFUTF16的equals方法,进行数据处理(字符数组元素逐一比较)。
所以,String类中的equals方法是用来判断两个对象的内容是否相同,而Object 类中的equals方法是用来判断两个对象是否是同一个对象,所谓同一个对象指的是内存中的同一块存储空间。