什么时候应该用equals(),什么时候应该用==

本人小白一枚最近这一部分比较晕,所以自己就仔细研究了一下

我结合网上和自己的理解总结了一些,如果我说的有问题,也请大家及时提醒,不足或漏说的地方愿大家积极

补充以供更多小白得到帮助,在此谢谢大家了!



1、equals是object的方法


2、String类型的
equals重写了object的方法,所以此方法比较的是内容,不比较内存地址
==比较内容和地址,因为String也属于引用数据类型
注意:String是特殊的在声明对象时可以写new也可以不写(不写默认就是new)
(总结:==比较内存地址和内容,equals方法被重写只比较内容)


3、基本类型,如int,char,long,boolean。
没有equals方法,只有==只比较值,因为基本数据类型存在栈里也不能new,最关键的一点是只有对象才能调方法
(总结:基本数据类型只有==进行比较,只比较值)


4、引用数据类型,如Integer,Byte,Long,Character,Boolean
引用数据类型是可以new的,而new出来的对象都会在堆中有开辟一个内存地址空间
通常用==比较对象时,比较的就是内存地址和内容
equals是用==判断两个对象是否相等,比较内存地址和内容,当两者都相等时才返回真
(总结:引用数据类型除String特殊外,equals和==都比较内存地址和内容)




以上是我个人的总结,如有错误或不足请大家及时指出!


下面我有几个问题
1.如果我有一个自定义类对象stu

那么我比较两个对象是否相等,在没重写equals和hashcod方法时,是否用equals和==都可以?(是)



2.如果我比较这个对象中的某个属性是否等于某内容时,这个比较是否就要看我自定义类中的属性类型了?(如果说其中的属性是基本数据类型就只能用==比较值。如果是引用数据类型equals和==都行,比较内存地址和内容。如果是String类型equals比较内容,==比较内存地址和内容)



  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
public boolean equals方法一般用于比较两个对象是否相等。在Java中,使用"=="运算符比较两个对象时,会比较这两个对象在内存中的地址是否相同,而不是比较它们的内容是否相同。因此,如果我们需要比较两个对象的内容是否相同,需要使用equals方法。 equals方法的通用实现方式是,首先比较两个对象的类型是否相同,如果类型不同则返回false,如果类型相同再比较它们的内容是否相等。对于不同类型的对象,一般需要进行类型转换之后才能进行比较。 例如,我们可以编写一个Person类,并实现equals方法来比较两个Person对象的内容是否相等: ``` public class Person { private String name; private int age; private String address; public Person(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Person)) return false; Person p = (Person) o; return name.equals(p.name) && age == p.age && address.equals(p.address); } } ``` 在上面的例子中,我们重写了equals方法,并在其中比较了Person对象的三个属性,即name、age和address是否相等。如果三个属性都相等,则返回true,否则返回false。 使用equals方法的场景包括但不限于: 1. 比较两个对象是否相等,例如在集合类中的contains方法中使用; 2. 实现对象的哈希表等数据结构时需要使用equals方法来判断两个对象是否相等; 3. 在自定义类中重写equals方法,以便于比较对象的内容是否相等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值