String重写了equals和hashcode吗
时间: 2024-05-28 16:12:31 浏览: 83
是的,String类已经重写了equals()和hashCode()方法。在String类中,equals()方法比较的是两个字符串的内容是否相同,而不是比较两个对象的引用是否相同。同时,String类还重写了hashCode()方法,以便将String对象作为键存储在哈希表中时能够正确地工作。重写的hashCode()方法是基于字符串的内容计算出一个哈希码,使得相同内容的字符串具有相同的哈希码。
相关问题
重写 equals 和 hashCode 方法
重写 equals 和 hashCode 方法的目的是为了比较两个对象是否相等,以及将对象放入散列表中。以下是一个示例:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
在此示例中,equals 方法比较了两个对象的姓名和年龄是否相等,如果相等则返回 true,否则返回 false。hashCode 方法使用 Objects 类的静态方法 hash,将对象的姓名和年龄组合成一个哈希码,用于将对象放入散列表中。
需要注意的是,重写 equals 方法时需要遵循以下规则:
1. 自反性:对于任何非空引用 x,x.equals(x) 应该返回 true。
2. 对称性:对于任何非空引用 x 和 y,如果 x.equals(y) 返回 true,则 y.equals(x) 也应该返回 true。
3. 传递性:对于任何非空引用 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,则 x.equals(z) 也应该返回 true。
4. 一致性:对于任何非空引用 x 和 y,多次调用 x.equals(y) 应该始终返回相同的结果。
5. 对于任何非空引用 x,x.equals(null) 应该返回 false。
Java中,String重写了equals和hashCode
是的,在Java中,String类重写了equals和hashCode方法。
- equals方法用于比较两个字符串是否相等。它比较两个字符串的内容是否相同,如果相同则返回true,否则返回false。
- hashCode方法返回字符串的哈希码。哈希码是由字符串中的每个字符的ASCII码值的和得到的整数。它用于将字符串用于哈希表中,可以提高查找效率。
举个例子:
```
String str1 = "hello";
String str2 = "world";
System.out.println(str1.equals(str2)); // 输出false
System.out.println(str1.hashCode()); // 输出99162322
System.out.println(str2.hashCode()); // 输出113318802
```
阅读全文