目录
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方法时,需要遵守以下规则:
- 自反性:x.equals(x)应该返回true
- 对称性:如果x.equals(y)返回true,则y.equals(x)也应该返回true
- 传递性:如果x.equals(y)返回true,y.equals(z)也返回true,则x.equals(z)应该返回true
- 一致性:如果x.equals(y)返回true,那么在x和y之间没有修改的情况下,多次调用x.equals(y)应该返回true
- 非空性: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方法的例子:
- String类
- Integer类
- Double类
- Boolean类
- Date类
- Calendar类
- BigInteger类
- BigDecimal类
- Array类
- ArrayList类
- HashSet类
- HashMap类
- TreeMap类
- LinkedHashMap类
- 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