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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© I空空 中级黑马   /  2014-12-14 15:51  /  1238 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals和==的区别

==比较的是两个对象的地址值,还可以用于比较两个原生数据的值是否相等。
而equals 不能用于比较两个原声数据是否相等,它是用于比较两个对象的。请参考源代码
public boolean equals(Object cc){
if(a==b)
        return true;
else
        return false;
}

例如
Person p1=new Person();
Person p2=new Person();
System.out.println(p1==p2);//false
System.out.println(p1.equals(p2));//false

那这样看起来当比较两个对象是否相同时和“==”没什么区别,但是假如有一群学生,我们通过判断他们的年龄
和姓名如果相等,我们判断这两个学生是同一人,这时如果直接
Student stu1=new stutent();
Studnet stu2=new student();
stu1.equals(stu2)结果为false,这显然不行,所以我们要复写equals方法来判断这两个学生是否为同一人

public class equalsTest
{
        public static void main(String[] args)
        {
                Student stu1=new Student(20,"xiaoming");
                Student stu2=new Student(20,"xiaoming");
               
                System.out.println(stu1.equals(stu2));//true
                System.out.println(stu1==stu2);//false
               
                System.out.println("...........");
                int a=1;
                int b=1;
                System.out.println(a==b);
                //System.out.println(a.equals(b));
               
                Person p1=new Person();
                Person p2=new Person();
                System.out.println(p1==p2);//false
                System.out.println(p1.equals(p2));//false
               
        }
}

class Student
{
        private int age;
        private String name;
       
        Student(int age,String name)
        {
                this.name=name;
                this.age=age;
        }
       
        public boolean equals(Student stu)
        {
                if(this.age==age & this.name==name)
                return true;
                else
                        return false;
        }
}

我是这么理解的 ==用与判断两个对象的地址值是否相同,而equals是用于判断两个对象内容是否相同,我们由于各种需要
经常要重写Object的equals方法。


String类中的equals()方法:

public boolean equals(Object anObject)
{
       //如果是同一个对象
        if (this == anObject)
        {
            return true;
        }
        //如果传递进来的参数是String类的实例
        if (anObject instanceof String)
        {
            String anotherString = (String)anObject;
            int n = count;//字符串长度
            if (n == anotherString.count) //如果长度相等就进行比较
            {
                char v1[] = value;//取每一个位置的字符
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) //对于每一位置逐一比较
                {
                    if (v1[i++] != v2[j++])
                        return false;
                }
                return true;
            }
        }
        return false;
}

String类中如何判断两个对象

个人总结:参考源代码可以得知,String类中的equals()方法比较的是两个字符串内容是否相同。
而== 比较的是两个String对象是否相同
所以
String s1=new String("aa");//创建了一个new String()和"aa"两个对象。
String s2="aa";
s1==s2;//false
s1.equals(s2);//true

7 个回复

倒序浏览
学习了,顶一下。
回复 使用道具 举报
写得很给力哦
回复 使用道具 举报
写得非常不错
回复 使用道具 举报
涨姿势了,对象用的是equals多,对吧。
回复 使用道具 举报
感谢楼主分享
回复 使用道具 举报
reyzarc 中级黑马 2014-12-21 13:18:21
7#
分析得很详细,受教了
回复 使用道具 举报
equal我一般理解为一个对象  equel就为true。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马