使用带有重写的.equals()

时间:2016-01-20 18:46:15

标签: java java-8 hashset

我尝试使用重写的HashSet方法在java 8中使用.equals()。以下是我使用的代码示例:

import java.util.HashSet;

public class Test{
    String id;
    int a;

    public Test (String i, int a){
            this.id = i;
            this.a = a;
    }

    @Override
    public boolean equals(Object obj){
        if (obj instanceof Test){
            if (((Test)obj).id == this.id){
                    return true;
            }

        }
        return false;
    }



    public static void main(String[] args){
        HashSet<Test> set = new HashSet<Test>();

        Test a = new Test("hello", 1);
        Test b = new Test("hello", 2);

        System.out.println("equals?\t\t" + a.equals(b));

        set.add(a);

        System.out.println("contains b?\t" + set.contains(b));
        System.out.println("contains a?\t" + set.contains(a));

        System.out.println("specific?\t" + (b == null ? a == null : b.equals(a)));

    }

}

这是输出:

equals?         true
contains b?     false
contains a?     true
specific?       true

正如您所看到的,.equals()按预期传递,但contains()的行为并不像我预期的那样。

根据documentationcontains()应该传递&#34;当且仅当此集合包含元素e时(o==null ? e==null : o.equals(e))&#34;。我运行了那个确切的代码然后通过,那么为什么contains()仍然失败?

0 个答案:

没有答案