java中==和euqals的区别

1.==是一个运算符,equals是一个方法

2.==比较基本数据类型比较的是值的大小,比较引用数据类型比较的是地址值是否相同。

3.equals方法比较的是引用数据类型。如果未重写比较的也是地址值。重写后比较的是内容

String name;
 public Person() {
 }
 public Person(String name) {
     this.name = name;
 }

 public static void main(String[] args) {
     Person p1 = new Person("aa");
     Person p2 = new Person("aa");
     System.out.println(p1);//demo1211.Person@50cbc42f
     System.out.println(p2);//demo1211.Person@75412c2f
     System.out.println(p1.equals(p2));//
 }

注意:这里虽然两个对象的内容相同,但是在源码中依然是用==进行判断,比较地址值。所以比较结果为false。且各位学习的小伙伴记住,只要new对象,必定在堆内存开辟空间,所以两个对象地址肯定是不一样的。

4.通常使用equals方法比较地址值无任何意义,比如按照上述案例,创建了p1,p2两个对象,其中name属性都是相同,我们认为name相同的人就应该是相等的。所以需要重写equlas方法。

重写equals方法的注意事项:

这里有以下两种重写的方式:书中给出的解释如下。

1.如果子类有自己的相等性概念,则对称性需求将强制使用getclass方法进行检测。

2.如果由超类决定相等性概念,那么就可以使用instanceof关键字检测,这样就可以在不同的子类对象之间进行相等性比较。

第一种:

public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return Objects.equals(name, person.name);
}

第二种:

public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Person)) return false;
    Person person = (Person) o;
    return Objects.equals(name, person.name);
}

ps:先写到这里,第一次写,疏漏会很多,有不妥和疑问的地方欢迎大家指正和询问。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值