黑马程序员技术交流社区

标题: 自己眼中的equals和==的区别 [打印本页]

作者: 王震阳老师    时间: 2012-10-1 11:55
提示: 该帖被管理员或版主屏蔽
作者: 王震阳老师    时间: 2012-10-1 11:55
C:\Documents and Settings\Administrator\桌面\javacode>javac T

C:\Documents and Settings\Administrator\桌面\javacode>java Te
s1.equals(s2)true
false

C:\Documents and Settings\Administrator\桌面\javacode>
作者: 王震阳老师    时间: 2012-10-1 11:57
,怎样将图片放上来呀,怎么搞不好呢
作者: 李玉生    时间: 2012-10-1 12:41
看下面例子:
/**
*举例说明equals与==
*/
public class TestEqual
{
        public static void main(String[] args)
        {
                int it = 65;
                float fl = 65.0f;
                //将输出true
                System.out.println("65和65.0f是否相等?" + (it == fl));
                char ch = 'A';
                //将输出true
                System.out.println("65和'A'是否相等?" + (it == ch));
                String str1 = new String("hello");
                String str2 = new String("hello");
                //将输出false
                System.out.println("str1和str2是否相等?" + (str1 == str2));
                //将输出true
                System.out.println("str1是否equals str2?" + (str1.equals(str2)));

        }
}
作者: 王震阳老师    时间: 2012-10-1 12:52
李玉生 发表于 2012-10-1 12:41
看下面例子:
/**
*举例说明equals与==

首先感谢您的回复,您的意思是说明:==用于比较数值型数据时(当然包括char类型的)时候,==比较的不是地址而是数值是否相等吗,感谢您的补充。
作者: 李玉生    时间: 2012-10-1 13:02
/**
* 深入了解equals
*/

//定义一个Person类
class Person
{
        private String name;
        private String idStr;
        public Person(){}
        public Person(String name , String idStr)
        {
                this.name = name;
                this.idStr = idStr;
        }
        //下面是name和idStr的setter和getter方法。
        public void setName(String name)
        {
                this.name = name;
        }
        public String getName()
        {
                 return this.name;
        }

        public void setIdStr(String idStr)
        {
                this.idStr = idStr;
        }
        public String getIdStr()
        {
                 return this.idStr;
        }
       

        //重写equals方法,提供自定义的相等标准
        public boolean equals(Object obj)
        {
                //待比较的两个对象是同一个对象,直接返回true
                if(this == obj)
                {
                        return true;
                }
                //只有当obj是Person对象,这里用到了反射的基础知识
                if (obj != null && obj.getClass() == Person.class)
                {
                        Person personObj = (Person)obj;
                        //并且当前对象的idStr与obj对象的idStr相等才可判断两个对象相等
                        if (this.getIdStr().equals(personObj.getIdStr()))
                        {
                                return true;
                        }
                }
                return false;
        }

}
/*
        由于instanceof运算符的特殊性,当前面对象是后面类的实例或其子类的实例都将返回true,
        所以实际上重写equals()方法时判断2个对象是否为同一个类的实例时使用instanceof是有问题的,
        如果比较的两个对象是同一个对象,则可以直接返回true即可。

  
        public boolean equals(Object obj)
        {
                //只有当obj是Person对象
                if (obj != null && obj instanceof Person)
                {
                        Person personObj = (Person)obj;
                        //并且当前对象的idStr与obj对象的idStr相等才可判断两个对象相等
                        if (this.getIdStr().equals(personObj.getIdStr()))
                        {
                                return true;
                        }
        }
                return false;
        }
        */
public class OverrideEqualsRight
{
        public static void main(String[] args)
        {
                Person p1 = new Person("毛泽东" , "123434");
                Person p2 = new Person("毛主席" , "123434");
                Person p3 = new Person("毛小三" , "9993343");
                //p1和p2的idStr相等,所以输出true
                System.out.println("p1和p2是否相等?" + p1.equals(p2));
                //p2和p3的idStr不相等,所以输出false
                System.out.println("p2和p3是否相等?" + p2.equals(p3));
        }
}
作者: 李玉生    时间: 2012-10-1 13:05
兄弟,加油,相信你会很快学会的
作者: 恒士利平    时间: 2012-10-1 13:07
楼主的说法存在一定的错误,显然有些说法是不科学的。楼主所说的情况只能指的的当==和equals都比较的是引用数据类型时才成立的,而对于基本数据类型,==和equals是不能这样被你描述的。

作者: 王震阳老师    时间: 2012-10-1 13:12
李玉生 发表于 2012-10-1 13:05
兄弟,加油,相信你会很快学会的

自己之前对==和equals感觉很难区分,后来知道点他们两个的关系,误以为自己已经掌握了==和equals的使用方法和区别,但是您看到您的回复,自己感觉自己的认识水平还差的很,自己还要虔诚的学习。谢谢。
作者: 李玉生    时间: 2012-10-1 15:19
你的理解很好,我只是把你的理解实例化了而已{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2