java 以String[]为键的不可变Map未返回正确键的值

byqmnocz  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(120)

我在我非常简单的代码中使用了ImmutableMap。有一次,我试图返回一个键对应的值,这个键是一个只有1个值“1234”的字符串数组。下面是调试步骤的屏幕截图:

然而,我没有得到值,键也不匹配。下面是调试器中的candidateKey:

这是我在调试器中的关键:

这里的调试器说他们不相等!

快把我逼疯了。我错过什么了吗?

hivapdat

hivapdat1#

在比较字符串时使用.equals()是正确的,但是当你在两个String[]上使用该方法时,你就真的回到了比较对象引用的问题。如果你想比较两个String数组的内容,那么你可以使用Arrays.equals(Object[] a1,Object[] a2)。文档在这里,但基本上是比较每个数组的长度,然后确保它们包含相同的项。
最后,你的代码会变成这样:

if (Arrays.equals(key, candidateKey)) {
  return entry.getValue();
}
nhjlsmyf

nhjlsmyf2#

请看看这个问题为什么这不起作用:equals vs Arrays.equals in Java
本质上,你是在比较数组的内存地址。java.util.Arrays.equals方法将比较长度是否相同,每个对象equals方法将返回值true。由于string equals方法比较字符,那么它们将返回true,这将给予你想要的结果。
如果继续并将其更改为对象数组,则它将取决于类如何实现equals方法;如果将实现保留为默认值,则它将仅比较内存地址(使用==),如果它们不是相同的引用,则返回false。

相关问题