我试图比较两个相同类型的对象(在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新手。
想象一下,您和您的妻子有双胞胎。
他们是“相同”的人吗?不,他们不是。让我们将它们称为孪生A和孪生B。它们是两个不同的实例,是的,它们看起来相同,但是如果您正在谈论孪生A,则不是在谈论孪生B,反之亦然。关键是,它们不是EQUAL :),在Java中是相同的。双胞胎A仅等于自身,其他不等于。
您必须创建自己的方法,该方法比较Osoba的两个实例的所有属性。
另一个选择是重写equals和hashCode方法,但这不是您的情况的好方法。