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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张强1 中级黑马   /  2013-7-21 23:35  /  1648 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

==和equals方法究竟有什么区别?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

10 个回复

倒序浏览
本帖最后由 zms2100 于 2013-7-21 23:51 编辑

呵呵......这个算赚技术分贴莫,呵呵,开玩笑的。
在Java中Object类中的equals方法底层跟"=="是一样的,都是比较内存地址值,不同点是:
1、equals()是方法,因此子类们可以对其进行复写,因此equals方法的比较方式就会发生变化;
2、从JDK1.5版本开始,逻辑比较符“==”有了限制,开始跟Object类的equals()方法不同,因为安全性等情况,JDK1.5起的"=="只能比较同种数据类型间的.class字节码(是否能扩大到"只能比较同种数据类型",这个有点记不清了,可以去验证下,呵呵);而equals()方法还是能比较不同数据类型间的.class。  
【这个也是可以去验证的,如果学到高新技术视频中的反射等知识,应该就会遇见这种情况;当然它和泛型是一样的,是伪的,即只在编译时会检测类型限定,因此可通过反射对其进行不同数据类型间.class的比较。】个人见解,可能有所不足,欢迎提出不同见解相互学习,O(∩_∩)O~........也仅供参考,呵呵

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 兴庭说的第二句,多看,多练是必须的..

查看全部评分

回复 使用道具 举报
相等性的比较(==)对于原生数据类型来说,比较的是左右两边的值是否相等;对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法。对于Object类的equals()方法来说,它是判断调用equals方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==。
对于String类的equals方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。对于String对象的相等性判断来说,使用equals方法,而不是使用==。
public class test {
public static void main(String[] args)
{
        int i = 1;
        int j = 1;
        System.out.println(i == j);//返回true,对原生数据类型来说,比较的是左右两边的值是否相等
       
        Object object1 = new Object();
        Object object2 = new Object();
        System.out.println(object1 == object2);//返回false,Object类型比较是否指向同一个地址


        Object object3 = new Object();
        Object object4 = new Object();
        System.out.println(object3.equals(object4));//返回false,对Object来说,equals等价于==

        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);//返回false,判断引用地址是否相同
        System.out.println(s1.equals(s2));//返回true,判断字符串内容是否相同
}
}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
                String str1 = new String("str");
                String str2 = new String("str");
                System.out.println("==比较: "+(str1==str2));
                System.out.println("equal比较:"+ str1.equals(str2));
               

输出的结果是:==比较: false
                  equal比较:true
                     

"=="比较的是对象的引用,即为引用的地址值
equals比较的是对象的值,

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
亲   由于equals这个方法用途很广,多以很多时候都会被复写。所以呢  个人建议你用的时候自己查下API。当然equals大多数的比较是内容是否相等,有时候也会是判断地址是否相同。
回复 使用道具 举报
==  和 equals 返回的都是真或者假.  但是他们比较的内容是不一样的 .  
==比较的是内存中的地址.  equals比较的是对象的内容. .  
举个例子. String a="Text";  String b="Text";   
a==b 的话  就是假  因为是两个对象  所有有两个地址,  两个地址不一样 自然就是假.
a.epuals(b)   就是真,  因为内容.一样.  都是Text.

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
简单的理解就是  ==比较的是内存中数据的地址
                内容一样的两个数据如果内存地址不一样 使用==是不能比较的


                 equals比较的是内存中数据的内容
                 内容一样不管内存一不一样 都可以使用equals来比较
回复 使用道具 举报
==比较的是内存地址值。equals比较的是内容是否相同。
String a="txt";
String b=new String("txt");
System.out.println(a==b);//错的。内存地址不同了。String b=new String(“txt”);相当开辟了两个内存空间。地址值不同。
System.out.println(a.equals(b));//内容一样,相同。对的
回复 使用道具 举报
==比较的是地址
equals比较的是内容
回复 使用道具 举报
基本数据类型我一般用==,对象的比较我一般用equals()。  还有就是equals()方法可以复写。
回复 使用道具 举报
“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象(Java分配的内存地址一样)当然如果用于int,long,double就不是看两个值是否相等了。 equals()是比较两个对象的内容是否相等,一般如果用户自己不定义针对自己的类的equals()方法,那么就会使用Object的活着你的类的父类的这个方法。如果你的类里没有对象引用的域,就不必要覆盖equals()(注意String域也是对象)String有自己的equals()方法(它已经覆盖了Object的该方法了。 如果你的类中的域有对象引用,那么你需要重写equals() 因为Object的equals()的工作实质是对你的所有的域进行“==”比较历遍,所以如果你的域有对象引用,“==”比较就又变成了对域的对象引用是否指向同一个对象了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马