A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhujiu1 初级黑马   /  2019-9-19 13:43  /  640 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一般对象使用equals这个方法用的都是Object类的方法。
具体实现为:
public boolean equals(Object obj) {
    return (this == obj);
}
其本质还是比较地址,StringBuilder对象使用的就是Object中的这个方法。所以结果为false
String类中则重写了equals方法。所以结果为true
具体实现为:
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {//判断该对象是否是String类型对象
        String aString = (String)anObject;//向下转型
        if (coder() == aString.coder()) {
            return isLatin1() ? StringLatin1.equals(value, aString.value)
                              : StringUTF16.equals(value, aString.value);
        }
    }
    return false;
}
总结:==对于基本类型来说是值比较,对于引用类型来说比较的则是地址引用。而 equals默认情况下是引用比较,只是很多类重写了equals方法,例如String,Integer等把它变成了值比较!所以一般情况下equals比较的是值相等,但是前提是必须重写了equals方法!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马