【问题标题】:Compare two objects of the same type in Java在Java中比较两个相同类型的对象
【发布时间】:2015-03-23 11:26:37
【问题描述】:

我有一个类 ObjectX,以及同一个类的两个对象 objectX1 和 objectX2。

我还有一个方法可以检查该类的两个对象中哪一个是最大的。类的每个对象都包含大量存储在 arrayList 中。

这是方法声明:

public ObjectX bigger(ObjectX objectX2);

这个方法工作得很好,它从类本身中获取除对象之外的另一个对象,并返回最大的对象。

我的问题是当我尝试在 if 语句中调用该方法时,如下所示:

public static void main(String[] args) {

if((this.bigger(object2)) == this)
    System.out.println("First is bigger!");
else if((this.bigger(object2)) == object2)
    System.out.println("Second is bigger!");
else
    System.out.println("The objects are equal!");

}

if 语句没有按预期进行检查。 我该如何解决这个问题?

【问题讨论】:

  • 此外,如果相等,您的函数会返回什么?
  • @yiabiten 它返回第一个对象,因为两者相等我只返回其中一个

标签: java


【解决方案1】:

您的尝试存在许多问题。

[编辑 - 感谢Tim Biegeleisen 发现此内容]

首先,您在static 上下文中引用this,而类范围的上下文不能自己知道特定实例。

其次,== 用于比较对象引用。您应该改用equals

但在这种情况下,它可能不起作用,具体取决于您对方法 bigger 的实现。

我强烈建议改用Comparable<MyObject>

MyObject 替换为相关对象的类型,或者您要比较的所有对象的某个接口。

compareTo(T o) 方法可以使用您的bigger 方法中的逻辑来实现,等等!

根据合同,它应该返回:

负整数、零或正整数,因为此对象小于、等于或大于指定对象

请参阅 API here

【讨论】:

  • 我认为最大的问题是他在static 方法中使用this。这是绝对不行的。
  • 使用bigger 的实现方式,使用== 是正确的,因为他/她想检查返回的对象是否是同一个对象。不要只看到== 就认为它是错误的。
  • @TimBiegeleisen 我没有注意到。是的,这是一个危险信号:)
  • @Mena 所以基本上我的 compareTo 函数的主体等于我更大的函数,对吗?
  • @laker001 不完全是。 bigger 应该返回更大的对象。 compareTo 返回一个int,其符号和值取决于this 对象和给定参数之间的比较。然而,比较哪个更大的逻辑应该是可重用的。
【解决方案2】:

你不能在像 main 方法这样的静态方法中使用它。只能在实例方法中使用。

【讨论】:

  • 有关关键字this 的更多信息,请参见this SO article
  • 是的,但这不是一个完整的答案。
【解决方案3】:

让你的对象类实现Comparable并重写compareTo方法,这样你就可以定义判断哪个对象更大的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2012-12-12
    • 2020-07-13
    • 2012-09-27
    相关资源
    最近更新 更多