List.contains(A) 返回 false,但 List.contains(B) 和 B.equals(A) 返回 true?

问题描述 投票:0回答:1

我的程序中有一个名为

Requirement
的接口,其方法为
test(List)
ItemRequirement
实现
Requirement
,包含
Item A
,并且
ItemRequirement.test(List)
返回输入列表的
List.contains(A)

我遇到了一个问题,每当检查 ItemRequirement 时,它都会返回 false,即使它应该返回 true。

我通过将以下语句放入 ItemRequirement.test 来对此进行测试:

System.out.println(list.contains(A));
System.out.println(list.contains(B));
System.out.println(B.equals(A));
return list.contains(A);

控制台输出是

false
true
true

并且

return
false

我真的很困惑这里发生了什么,就好像 B.equals(A) 和 list.contains(B) 一样,list.contains(A) 不应该也是真的吗?

java list equals contains
1个回答
0
投票

引用 equals 的 javadoc 的注释太长了:

equals 方法实现非 null 上的等价关系 对象参考:

  • 它是自反的:对于任何非空引用值 x,x.equals(x) 应该返回 true。
  • 它是对称的:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回时,x.equals(y) 才应返回 true 是的。
  • 它是传递性的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z) 应该返回 true。
  • 它是一致的:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 一致返回 true 或 如果 equals 中没有使用任何信息,则始终返回 false 对象的比较被修改。 对于任何非空引用值 x,x.equals(null) 应返回 false。

这意味着对于任何

a
b
应该相等,你必须有 both
a.equals(b)
并且
b.equals(a)
返回
true
只有这样你才能确定
list.contains(a)
list.contains(b)
都是如果 a(或 b)包含在列表中,则返回
true

© www.soinside.com 2019 - 2024. All rights reserved.