【问题标题】:Comparing 2 objects from different classes java比较来自不同类java的2个对象
【发布时间】:2023-03-10 23:37:02
【问题描述】:

是否可以比较来自 2 个不同类别的 2 个对象。

假设我有一个向量,它添加了类 A 中的所有对象。我想将一些字符串与向量的元素进行比较。

例子:

if(string.equals(vector.get(i)))

这可能吗?

【问题讨论】:

  • 是的,有可能,您是否有更具体的问题表明这没有按您的预期工作?
  • 你能说得更具体一些吗?你想比较什么?

标签: java string class object


【解决方案1】:

是的,您可以致电equals()。但是,如果参数属于不同的类(可能不是子类),SomeClass.equals() 的任何合理实现都将返回 false

如果stringjava.lang.String 的实例,则此行为为specifically guaranteed

结果是true当且仅当参数不是null并且是一个String对象,它表示与此对象相同的字符序列。

【讨论】:

  • 是的,我有一个不同的类,它返回 false,我该如何解决它
  • @KarishKarish:定义“修复”。
  • 好的,我有 A 类和 B 类。A 类有一个接受字符串的构造函数。 B 类包含向量,它添加了 A 类中的所有元素。当我将向量与字符串进行比较时得到错误
【解决方案2】:

您的对象至少在 Object 类中,因此(至少部分)在同一个类中。

【讨论】:

    【解决方案3】:

    一个对象的Equals方法可以取任何其他对象。但是,在将苹果与橙子进行比较时,是否返回 true 取决于实现

    【讨论】:

      【解决方案4】:

      如果列表元素的类型不是 String,它总是返回 false。来自 String 方法 equals 的文档:

      将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是表示与此对象相同的字符序列的 String 对象时,结果才为真。

      这对于方法 equals 通常是正确的 - 只有在比较对象属于同一类或前者的子类的可能性时,它才会或应该返回 true。

      【讨论】:

      • 我使用不同类的问题,当我比较它们时它给了我错误
      • 嗯,这是预料之中的事情。但我猜您需要将 String 与其他类中的某个字段进行比较。那么你为什么不在另一个类的字段上调用 ​​equals 呢?
      【解决方案5】:

      这样写是完全正确的;

      public class MyClass {
          public boolean equals(Object o) {
              if(o instanceof SomeUnrelatedClass) return true;
              return false;
          }
      }
      

      但这是不可取的,因为至少 会尽量避免它。这会使处理MyClass 对象有点奇怪,例如将它们放入基于哈希的集合中。

      【讨论】:

        猜你喜欢
        • 2015-09-10
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多