Java 判断两个对象是否相等

  • 情况一:当类没有重写equals()方法时,通过equals()来比较该类的两个对象时就等价于通过==比较这两个对象。

  • 情况二:当类重写了equals()方法时,这是我们比较常用的方式。此时,我们通常通过重写equals()方法来判断两个对象的内容相等,若它们的内容相等,则返回 true。

代码示例:

public class test1 {

public static void main(String[] args) {

String a = new String(“ab”); // a 为一个引用

String b = new String(“ab”); // b为另一个引用,对象的内容一样

String aa = “ab”; // 放在常量池中

String bb = “ab”; // 从常量池中查找

if (aa == bb) // true

System.out.println(“aa==bb”);

if (a == b) // false,非同一对象

System.out.println(“a==b”);

if (a.equals(b)) // true

System.out.println(“aEQb”);

if (42 == 42.0) { // true

System.out.println(“true”);

}

}

}

说明:

  • String 类中的 equals 方法是被重写过的,因此String 的 equals 方法比较的是对象的值,而 Object 的 equals 方法是比较的对象的内存地址;

  • 当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。

2 使用 hashCode 与 equals 判断

============================================================================================

hashCode 的作用是用来获取哈希码,也可以称作散列码,实际返回值为一个 int 型数据,常用于确定对象在哈希表中的位置。

因为超类 Object 中有 hashcode 方法,也就意味着所有的类都有 hashCode 方法。

示例:如下通过重写 equal 方法,使得两个对象内容相同,然后这两个对象的哈希码并不相同。

public class EqualTest {

public static void main(String[] args) {

Person p1 = new Person(10, “张三”);

Person p2 = new Person(10, “张三”);

System.out.println(

“p1.equals(p2)=” + p1.equals(p2) + “, p1.hashcode=” + p1.hashCode() + “, p2.hashcode=” +p2.hashCode());

}

}

class Person {

int age;

String name;

……

@Override

public boolean equals(Object obj) {

if (this == obj) return true;

if (obj == null) return false;

if (getClass() != obj.getClass()) return false;

Person other = (Person) obj;

if (age != other.age) return false;

if (name == null) {

if (other.name != null)

总结

以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!

下面给大家分享下我的面试大全资料

  • 第一份是我的后端JAVA面试大全

image.png

后端JAVA面试大全

  • 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

14124247080)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

[外链图片转存中…(img-8OM1ICkr-1714124247080)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值