import java.util.*;
class emp{
String city;
String name;
emp(String a, String b)
{
city=a;
name=b;
}
}
public class HelloWorld{
public static void main(String []args){
Set<emp> s = new HashSet<emp>();
emp s1=new emp("bangalore","mukesh");
emp s2= new emp("bangalore","mukesh");
s.add(s1);
s.add(s2);
System.out.println(s1.equals(s2));
System.out.println("finsih");
System.out.println(s);
}
}
我正在创建两个对象,它们是相同的,但是它们被输入到set中,为什么s1.equals(s2)返回false?
答案 0 :(得分:-1)
它与插入设置无关。你需要覆盖equals,例如下面是基本相等的方法:
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Emp)) {
return false;
}
Emp emp = (Emp) o;
return Objects.equals(city, emp.city) &&
Objects.equals(name, emp.name);
}
按照详细信息,点击此处的示例: https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/
答案 1 :(得分:-1)
由于您未覆盖equals()
,因此使用Object#equals
,默认情况下使用==
运算符。由于您使用new
运算符创建了2个对象,因此它们的引用不同,因此对equals()
的调用返回false。您可以覆盖equals
和hashcode
以提供相等性:
class emp{
String city;
String name;
emp(String a, String b) {
city=a;
name=b;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof emp)) return false;
emp test = (emp) o;
return Objects.equals(city, emp.city) &&
Objects.equals(name, emp.name);
}
@Override
public int hashCode() {
return Objects.hash(city, name);
}
现在尝试存储对象只会在集合中存储一个对象。