【问题标题】:How to compare value in array?如何比较数组中的值?
【发布时间】:2009-03-31 12:45:37
【问题描述】:

如何比较数组中的值?

我有一个名为 list 的数组,其中包含 12 个元素。我看看索引 0 中的值是否等于或不等于索引 2 中的值。

我已经尝试过这段代码,但它似乎不起作用。

if ((list.get(0)==list.get(2) && list.get(1)==list.get(3)) 
{
   System.out.println("equal")
}

【问题讨论】:

  • “它似乎不起作用”不是一个很好的问题报告 :-) 您需要提供更多详细信息 - 它有什么作用?它甚至可以编译吗?它只是不打印“相等”吗?等等等等。
  • 请记住 == 与 equals(Object) 不同

标签: java arrays


【解决方案1】:

如果它是真的一个数组,你想要:

if (list[0] == list[2] && list[1] == list[3])

请注意,如果数组是引用类型,则按引用标识进行比较,而不是相等。你可能想要:

if (list[0].equals(list[2])) && list[1].equals(list[3]))

尽管如果任何值为 null 的话,那将会很糟糕。您可能需要一个辅助方法来解决这个问题:

public static objectsEqual(Object o1, Object o2)
{
    if (o1 == o2)
    {
        return true;
    }
    if (o1 == null || o2 == null)
    {
        return false;
    }
    return o1.equals(o2);
}

然后:

if (objectsEqual(list[0], list[2]) && objectsEqual(list[1], list[3]))

如果你真的有一个 ArrayList 而不是一个数组,那么以上所有内容仍然适用,只需在每个地方使用 list.get(x) 而不是 list[x]

【讨论】:

  • 谢谢乔恩。那真的很有帮助。但是如果不是寻找平等,我想检查元素是否不相等怎么办?我可以只使用 if (! (objectsEqual(list[0], list[2]) && objectsEqual(list[1], list[3]))))
【解决方案2】:
if(list[0] == list[2] && list[1] == list[3]){
    System.out.println("equal");
}

如果是字符串:

if(list[0].equals(list[2]) && list[1].equals(list[3])){
    System.out.println("equal");
}

【讨论】:

    【解决方案3】:

    您是在比较对象引用,而不是对象本身。您需要使用方法调用。所有类都从根 Object 类继承 equals(),因此它可能会起作用:

    if(list.get(0).equals(list.get(2)) && list.get(1).equals(list.get(3)))
    {
       System.out.println("equal");
    }
    

    This article 似乎是对其他可用比较方法的一个很好的总结。

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多