码迷,mamicode.com
首页 > 其他好文 > 详细

==和equals方法的区别和联系

时间:2020-03-02 23:00:32      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:return   向下转型   引用   png   boolean   mic   sys   The   hang   

1、==

(1)基本数据类型:比较的是值是否相等

   int a=1;
   int b=1;
   System.out.println(a==b);

返回true。

(2)引用数据类型,比较的是是否为同一对象:

        Student student1=new Student("201911","zhai");
        Student student2=new Student("201912","zhang");
        System.out.println(student1==student2);

返回false。

技术图片

 

两个对象的引用分别指向不同的对象。

 

        Student student1=new Student("201911","zhai");
        Student student2=new Student("201912","zhang");
        System.out.println(student1==student2);

返回true。

技术图片

 

 

 

对象的引用虽然不同,但是他们指向的是同一个对象。

2、equals()方法

(1)equals()方法不能作用于基本数据类型的变量

(2)equals()方法作用于引用数据类型,比较的是是否为同一对象:

equals继承自Object类,查看源码:

   public boolean equals(Object obj) {
        return (this == obj);
    }

可以看出,其实质是用==比较引用数据类型是否为同一对象。

(3)有些类对equals方法进行了重写(例如:String类):

查看String类的源码:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

比较的是对象的值,而不是对象是否为同一对象。

        String string1=new String("jiayou");
        String string2=new String("jiayou");
        System.out.println(string1.equals(string2));//true
        System.out.println(string1==string2);//false

因为分别创建了两个对象,对象的引用分别指向自己的对象,虽然两个对象的值相等,但是两个对象不是同一个对象(对象的地址不同)。

(4)自定义equals方法,比较对象的值是否相等:

public boolean equals(Object obj) {
        // 判断当前对象和传递的对象,如果是同一个对象直接通过
        if (this == obj) {//引用数据类型,比较的是是否为同一对象
            return true;
        }
        // 判断传递进来的对象是否是Vehicle类型,不是的话直接pass
        if (!(obj instanceof Vehicle)) {
            return false;
        }
        // 将obj向下转型为Vehicle引用,可以访问Vehicle特有内容,否则只能访问共有内容
        Vehicle v = (Vehicle) obj;
        return this.vType == v.vType && this.vNum == v.vNum;//基本数据类型,比较的是基本数据类型的值
    }

对equals方法进行重写后,equals方法的功能由比较两个对象是否为同一对象变为对象的值是否相等。

 

==和equals方法的区别和联系

标签:return   向下转型   引用   png   boolean   mic   sys   The   hang   

原文地址:https://www.cnblogs.com/zhai1997/p/12398258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!