java中==和equals的区别

先说一下==这个运算符的作用
它可以比较两个基本数据类型和引用数据类型(也即是一般我们自定义的一种类型)
1:对于基本数据类型来讲,如 int,double,String来讲 它比较的是数据类型的值是否相同。(不过比较的类型不一定相同,如int a=5和double b=5经过比较返回的仍然是true)
在这里插入图片描述

2:==运算符在比较引用数据类型时比较的时两个引用数据类型的地址值是否相等。

public class EqualsTest {
    public static void main(String[] args) {
        demo d1 = new demo("tom", 18);
        demo d2 = new demo("tom", 18);
        System.out.println(d1 == d2);
    }

}

class demo {
    String name;
    int age;

    public demo(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在这里插入图片描述
答案肯定是false,因为虽然d1这个对象和d2这个对象都有相同的属性,但是他们的地址值不一样,这两个引用没有指向同一个对象的实体。所以结果是false。

我们在来看看java中的equals方法
equals位置:在java.lang.Object下
作用:比较两个对象的地址值是否相同。即两个引用是否指向同一个对象实体。

public class EqualsTest {
    public static void main(String[] args) {
        demo d1 = new demo("tom", 18);
        demo d2 = new demo("tom", 18);
        System.out.println(d1==d2);
        System.out.println("****************");
        System.out.println(d1.equals(d2));
    }

}

class demo {
    String name;
    int age;

    public demo(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在这里插入图片描述

结果和==运算符是一样的,因为两个对象的地址值不一样

再看一个例子:

public class StringTest {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1.equals(s2));
    }
}

在这里插入图片描述

看完这个结果可能你会觉得很疑惑,其实这里是因为我们使用的是String类,因为我们知道在java中所有的类都是继承于Object类,而Object类中有equals方法,所以即String 类也继承了equals方法,但是不同的是String类对这个equals方法重写了,重写的目的也就是让equals来比较此时类的实体内容(属性)是否相同,而不是在比较对象的地址值是否相同。

对于上面的demo这个普通类来说它并没有重写Object类中的equals方法,所以它返回的是false,这里我们可以看一下Object类中定义的equals方法。

在这里插入图片描述这是equals方法的结构,我们可以看到他方法体里面的return语句与==运算符的作用完全相同。对于demo类来说,因为它比较的是this(也即是我们的d1对象,因为是它调用了equals方法)和obj(也即是我们的d2对象)。
在这里顺便说明一下this和super的区别:
this: this代表对本类对象的引用,指向本类中已经创建的对象;
super: super代表对父类对象的引用,指向父类对象;

说明:1:在java类中,像String、Date、File、包装类等都重写了Object类中的equals()方法。

2 :一般情况下我们都是在自定义的类中重写equals方法来比较对象的实体内容是否相同。好在IDEA中提供了我们一种快捷的方式不需要我们在自己重写equals方法了。 快捷键是按Alt键和Insert键然后选择equals方法他会自动帮我们重写。
在这里插入图片描述
总结:如果是基本类型比较,那么只能用==来比较,不能用equals ,如果是基本类型的包装类型,那么用equals

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值