小编典典

比较对象永远不会返回true

java

我试图比较两个相同类型的对象(在dosHave方法中),但是我从未返回过“ 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新手。


阅读 236

收藏
2020-11-30

共1个答案

小编典典

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

他们是“相同”的人吗?不,他们不是。让我们将它们称为孪生A和孪生B。它们是两个不同的实例,是的,它们看起来相同,但是如果您正在谈论孪生A,则不是在谈论孪生B,反之亦然。关键是,它们不是EQUAL
:),在Java中是相同的。双胞胎A仅等于自身,其他不等于。

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

另一个选择是重写equals和hashCode方法,但这不是您的情况的好方法。

2020-11-30