Java基础05 (equals 方法)

10 篇文章 0 订阅

目录

Java中 Equals()方法的父类是谁

Java中 Equals()方法是什么?

混淆点

  特殊


Java中 Equals()方法的父类是谁

首先我先引用一个点去介绍Equals方法的父类

Java中,Equals()方法的父类是Object类。因为Object类是所有类的基类,所有Java类最终都继承自Object类。Equals()方法在Object类中被定义,并在子类中可以被重写以实现特定的相等比较。

说明:在Java每一个类的使用中我们的字类都继承了这个方法,都可以去调用对象来使用


Java中 Equals()方法是什么?

Java中的equals方法是用于比较两个对象是否相等的方法。这个方法是Object类中的一个方法,因此它在每个Java对象中都可用。

equals方法的默认行为是比较两个对象的内存地址。也就是说,如果两个对象的内存地址相同,则equals方法返回true;否则返回false。但是,大多数情况下,我们希望equals方法比较的是对象的内容,而不是内存地址。因此,我们需要重写equals方法,以便它比较对象的内容。

重写equals方法时,需要遵守以下规则:

  1. 自反性:x.equals(x)应该返回true
  2. 对称性:如果x.equals(y)返回true,则y.equals(x)也应该返回true
  3. 传递性:如果x.equals(y)返回true,y.equals(z)也返回true,则x.equals(z)应该返回true
  4. 一致性:如果x.equals(y)返回true,那么在x和y之间没有修改的情况下,多次调用x.equals(y)应该返回true
  5. 非空性:x.equals(null)应该返回false

例如,我们可以重写String类的equals方法如下:

public boolean equals(Object obj) {
    if (obj instanceof String) {
        String str = (String) obj;
        return this.compareTo(str) == 0;
    }
    return false;
}

说明equlas()如果比较的是基本数据类型就是比较值,如果是引用数据类型就是比较地址值

但是 你可以去测试一下如果String去new对象的方法去比较equls() 会是出现地址值吗?

答案是不是,而是比较了String 里面具体字符串的内容是否相等。为什么和== 不一样了呢?

因为equals 被重写了呗!!!

以下是一些Java类重写了equals方法的例子:

  1. String类
  2. Integer类
  3. Double类
  4. Boolean类
  5. Date类
  6. Calendar类
  7. BigInteger类
  8. BigDecimal类
  9. Array类
  10. ArrayList类
  11. HashSet类
  12. HashMap类
  13. TreeMap类
  14. LinkedHashMap类
  15. LinkedList类

这些类重写equals方法的目的是为了确保它们能够正确地比较对象的相等性。如果你在自己的类中定义了equals方法,你也应该注意确保正确地重写它以确保正确性。

就是因为equlas被重写了 所以new的对象比较的值是它里面的值

但是 但是 再来个但是 我之前说的equls的方法 为什么要强调是new一个对象来使用的 而不是直接显式赋值呢? 我是为了和==区分 下面是new对象来实现的


String str1 = new String ("HR")
String str2 = new String ("HR")

混淆点

那么我们去str1 == str2 两个引用对象的地址值不相等 结果:true! 懵了吧?不是说 == 是比较地址值。是的 引用数据类型 == 比较的是地址值,eqlus ()比较的是值 但是那是我们基于new一个对象来使用equls ,其实在 Java中String == 他创建的对象不在栈内,而在字符串常量池中,Java运行时会先去常量池中找,找到这串字符串就给str2赋地址值 。没找到就去常量池中创建,因此结论也没问题,只是这个时候str1 str2 都指向同一个内存地址。==又是引用比较地址值的 当然是True啦💕 总结一下“:

  特殊


在Java中,使用 "==" 运算符比较两个字符串时,它将比较两个字符串对象的引用是否指向同一个内存地址。如果两个字符串对象的引用都指向同一个内存地址,则返回 true,否则返回 false。

例如:

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2); // 输出 true
System.out.println(str1 == str3); // 输出 false

在上面的代码中,str1 和 str2 都是指向 Java 字符串池中相同的字符串对象,因此两者的引用相同,比较结果为 true。而 str3 是通过 new 关键字创建的新字符串对象,因此它的引用指向堆内存中的另一个地址,与 str1 和 str2 的引用不同,比较结果为 false。

如果要比较两个字符串的值是否相等,应该使用 equals() 方法来进行比较。例如:

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1.equals(str2)); // 输出 true
System.out.println(str1.equals(str3)); // 输出 true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truswei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值