当前位置: 首页 > 面试题库 >

比较对象永远不会返回true

拓拔野
2023-03-14
问题内容

我试图比较两个相同类型的对象(在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方法,但这不是您的情况的好方法。



 类似资料:
  • 问题内容: 我正在使用Asp.net MVC3,并尝试在服务器上做一个简单的Ajax发布,它返回部分视图并在搜索过程中更新我的项目列表。 Ajax成功调用服务器,服务器通过发送部分视图进行响应。但是部分视图始终在新页面中呈现。我发现这是因为它不知道即将到来的ajax调用,因此它呈现了一个新页面。 我的控制器代码非常简单: 但是无论如何,Request.IsAjaxRequest()始终返回fals

  • 问题内容: 我遵循了Google提供的“ 本地服务”示例,但是我始终返回false,并且从未调用过。 我知道那会立即返回,但是我的对象永远不会触发。 我不知道这些是否适用 我的活动在tabHost内运行,我想知道这是否可以以任何方式影响服务绑定。 服务本身可能有问题,但是我可以将启动服务调用到具有相同功能的相同服务,并且可以按预期工作。 有任何人对此有经验吗?请帮帮我。 谢谢,PS我的目标是And

  • 条款21: 永远让比较函数对相等的值返回false 让我向你展示一些比较酷的东西。建立一个set,比较类型用less_equal,然后插入一个10: set<int, less_equal<int> > s; // s以“<=”排序 s.insert(10); // 插入10 现在尝试再插入一次10: s.insert(10); 对于这个insert的调用,set必须先要判断出

  • 我目前正在为我的不和谐服务器开发一个discord.py重写(1.3.3)机器人。目前,我正试图让机器人在语音频道中播放音乐。根据discord.py留档,您将使用函数channel.connect()连接到语音通道,该通道将返回VoiceClient对象。 然而,我从未从通道中获得VoiceClient对象。连接()。机器人确实加入了我的频道,但它似乎陷入了一个无限循环。在“wait chann

  • Python的新类型提示功能允许我们键入函数返回的提示… …或保留未指定的返回类型,PEP规定应导致静态分析器假设任何返回类型都是可能的: 任何没有注释的函数都应被视为具有最通用的类型 但是,我应该如何键入函数永远不会返回的提示?例如,键入 hint 这两个函数的返回值的正确方法是什么? 既没有指定

  • 我已经被覆盖了hashcode和equals以查找具有相同开始日期和关闭日期的值。我得到了重复对象的类似哈希代码。当等同于这些对象时,我得到了布尔值“假”。在我的理解中,对象==对象比较对象的引用,即使引用是相同的;代码返回假。你能帮我理解是什么问题吗?我在下面发布了我的代码: Main.java 输出: 检查客户对象引用:Customer@643 对象引用(位于Map中):[Customer@6