我正在尝试比较两个相同类型的对象(在方法中有),但我从未得到“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新手。
答案 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的回复帮助了我,所以如果有人遇到同样的问题,请阅读并尝试理解,这对我有帮助。我喜欢那对双胞胎的寓言:)当我试图比较两个字符串时,情况就是这样。