Java中,String重写了equals和hashCode
时间: 2023-02-14 18:35:07 浏览: 59
是的,在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
```
相关问题
0_10_java中==和equals和hashcode的区别
在Java中,"=="、equals()和hashCode()是用于比较对象的三个不同的方法。
首先,"=="是一个比较运算符,用于比较两个对象的引用是否相等。如果两个对象引用相同,则返回true;否则,返回false。这意味着它仅比较对象的内存地址。例如:
```
String a = "abc";
String b = "abc";
System.out.println(a == b); // 返回true,因为a和b引用相同的对象
```
其次,equals()是Object类的方法,被继承到其他类中。它用于比较两个对象的内容是否相等。默认情况下,equals()使用"=="来判断两个对象的引用是否相等。但是,可以通过重写equals()方法来改变比较规则。例如:
```
String a = "abc";
String b = "abc";
System.out.println(a.equals(b)); // 返回true,因为a和b的内容相等
```
最后,hashCode()是Object类的方法,用于获取一个对象的哈希码。哈希码是一个整数值,在哈希表等数据结构中用于快速查找。在默认情况下,hashCode()方法返回对象的内存地址的哈希码。hashCode()方法在需要使用哈希表存储对象时经常被用到。例如:
```
String a = "abc";
System.out.println(a.hashCode()); // 返回一个整数哈希码
```
总结起来,"=="用于比较两个对象的引用是否相等,equals()用于比较两个对象的内容是否相等,而hashCode()则用于获取对象的哈希码。在某些情况下,我们可能需要重写equals()和hashCode()方法,以便根据对象的特定属性进行比较和哈希码的生成。
重写hashcode和equals方法
重写hashcode和equals方法是为了更好地实现对象的比较和查找。下面是一个示例:
```
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和hashcode方法,使得两个Person对象只有当它们的名字和年龄都相同时才被视为相等。这样可以更好地实现对象比较和查找。