==?对于基本数据类型来说,是用于比较
“值”是否相等的;而对于引用类型来说,是用于比较引用地址是否相同的。
查看源码我们可以知道 Object 中也有?equals()? 方法,源码如下:
public?boolean?equals(Object?obj)?{
????return?(this?==?obj);
}
可以看出,Object?中的?equals()?方法其实就是 ==,而?String?重写了 equals()
方法把它修改成比较两个字符串的值是否相等。
源码如下:
public?boolean?equals(Object?anObject)?{
????//?对象引用相同直接返回?true
????if?(this?==?anObject)?{
????????return?true;
????}
????//?判断需要对比的值是否为?String?类型,如果不是则直接返回?false
????if?(anObject?instanceof?String)?{
????????String?anotherString?=?(String)anObject;
????????int?n?=?value.length;
????????if?(n?==?anotherString.value.length)?{
????????????//?把两个字符串都转换为?char?数组对比
????????????char?v1[]?=?value;
????????????char?v2[]?=?anotherString.value;
????????????int?i?=?0;
????????????//?循环比对两个字符串的每一个字符
????????????while?(n--?!=?0)?{
????????????????//?如果其中有一个字符不相等就?true?false,否则继续对比
????????????????if?(v1[i]?!=?v2[i])
????????????????????return?false;
????????????????i++;
????????????}
????????????return?true;
????????}
????}
????return?false;
}
原文:https://www.cnblogs.com/xiaodou00/p/13495206.html