比较对象永远不会返回true

时间:2015-03-30 15:35:35

标签: java

我正在尝试比较两个相同类型的对象(在方法中有),但我从未得到“true”返回。这是我的代码:

private ArrayList<Osoba> osoba = new ArrayList<Osoba>();    

public boolean doesHave(Osoba o) {
        for (int i = 0; i < osoba.size(); i++) {
            if (pobierz(i).equals(o))
                return true;
        }
        return false;
    }

public Osoba pobierz(int index) {
            return osoba.get(index);
        }

'Osoba'课程,如下所示:

public class Osoba {
    private String imie;
    private String nazwisko;

    public String toString() {
        return imie + " " + nazwisko;
    }

    public Osoba(String name, String surname) {
        imie = name;
        nazwisko = surname;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }
}

主要代码:

Osoba osoby = new Osoba(name, surname);
if (kartoteka.doesHave(osoby) == Boolean.TRUE) {
            temp = odczyt.nextLine();
            if (temp.equals("y"))
                kartoteka.usun(osoby); //some method
            else
                ...
        }

无论我使用什么输入,这部分都不会发生。 'kartoteka'是我的包裹,当然我已导入。每个类都在单独的包中,但使用它们没有问题。我已经尝试谷歌搜索了很长一段时间,但没有任何帮助我,它似乎只是

if (kartoteka.doesHave(osoby) == Boolean.TRUE)

永远不会是真的,但我不知道为什么。没有Boolean.TRUE的代码也不起作用。如果我能得到一些提示,我会感激不尽。很抱歉提出这样的问题,但我是java新手。

4 个答案:

答案 0 :(得分:2)

现在你的代码检查两个对象的内存地址是否相同,只有当它是同一个对象时才能为真。

您需要实现一个比较两个Osoba对象的方法,方法是从这些对象中比较您想要的属性并适当地返回true/false

答案 1 :(得分:2)

想象一下,你和你的妻子都有双胞胎。

他们是&#34;相同&#34;人?不,他们不是。让我们称他们为双胞胎A和双胞胎B.他们是两个不同的情况,是的,他们看起来相同,但如果你说的是双胞胎A,你不是在谈论双胞胎B,反之亦然。关键是,它们不是EQUAL :),它在Java中是相同的。 Twin A只与自己相等,no1 else。

您必须创建自己的方法,该方法会比较两个Osoba实例的所有属性。

另一个选项是覆盖equals和hashCode方法,但在你的情况下它不是好方法。

答案 2 :(得分:0)

Osaba应该实施equals

@Override
public boolean equals(Object other) {
    return imie.equals(((Osaba) other).getImie())
        && nazwisko.equals(((Osaba) other).getNazwisko()));
}

如果你没有实现equals,将使用默认实现。

答案 3 :(得分:0)

@libik和@Code Whisperer的回复帮助了我,所以如果有人遇到同样的问题,请阅读并尝试理解,这对我有帮助。我喜欢那对双胞胎的寓言:)当我试图比较两个字符串时,情况就是这样。