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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡大强 中级黑马   /  2012-6-17 01:08  /  1347 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals 方法:(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==:用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true


Eg:

s1 = new String("java"); //创建的是字符串对象
s1.equals("java"); //返回true  比较s1对象的内容是不是"java”.
s1 == "java" //返回false 比较s1对象在内存中存放的地址和"java”的地址是不是同一个地址
//如果
s1 = "java"; //注意这种赋值方式和上面的区别
s1 == "java" //返回true

2 个回复

倒序浏览
呵呵,感谢楼主分享~!~{:soso_e181:}
回复 使用道具 举报
对于Person类的2个实体化对象P1与P2来说,他们被new出来后,占用的是不同的存储单元的,所以他们的地址并不相同,因此p1.equals(p2)为false 。
如果需要返回的结果为true,你必须重写equals方法。
例如在Person类里面重写equals方法(假设Person里面成员变量i的值相等就可以认为两个对象相等):
public boolean equals(Person p) {
    if(this.i == p.i) {
        return true;
    } else {
        return false;
}
}  
}
1.对于基本数据类型,只有==,没有equals()(注意String类型不是基本数据类型),所以很明显值相等就为true。
          2.对于字符串,==指比较两者的内存地址,equals()则重写了Object类的equals(),比较的是内容,你可以查看API看看它怎么重写的。对于字符串是存放在方法区的字符串常量池里的,无论定义多少,只要字符串值相等都指同一块内存地址,所以==和equals()结果没区别。
          3.对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等。
          4.建议:和四楼一样,建议你学完“内存地址”和“重写”的内容,再回过头来看这一知识点,就能深刻明晰了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马