gpt4 book ai didi

java - 为什么 containsAll 在第二种情况下确实返回 true

转载 作者:行者123 更新时间:2023-11-29 05:03:10 27 4
gpt4 key购买 nike

它编译和运行没有问题,但我不明白为什么第二条语句返回 false:

    String s0 ="0123";
String s1 ="0123";


System.out.println(new HashSet<>(Arrays.asList(ArrayUtils.toObject(s1.toCharArray()))).containsAll(Arrays.asList(ArrayUtils.toObject(s0.toCharArray()))));
System.out.println(new HashSet<>(Arrays.asList(s1.toCharArray())).containsAll(Arrays.asList(s0.toCharArray())));

输出:

true
false

JDK 1.8

编辑:

谢谢@Eran当我像这样避免菱形运算符时会出现编译问题:

new HashSet<Character>(Arrays.asList(s1.toCharArray())).containsAll(Arrays.asList(s0.toCharArray()));

最佳答案

由于 s0.toCharArray() 是原始数组 (char[]),因此 Arrays.asList(s0.toCharArray()) 是一个列表,其单个元素是 char[]。同样, new HashSet<>(Arrays.asList(s1.toCharArray())) 是一个包含单个 char[] 的集合。

这两个 char[] 对象不相等,因为数组不会覆盖 Objectequals 并且每次调用 toCharArray[] 都会创建一个新的数组实例,所以即使 s0==s1s0.toCharArray() != s1.toCharArray()s0.toCharArray().equals(s1.toCharArray())是假的。

在您的第一行代码中,我假设 ArrayUtils.toObject 将原始数组转换为引用数组(即从 char[]Character[] ),这就是 containsAll 返回 true 的原因(因为 HashSetList 都包含 4 Character 个实例,并且 Character 类覆盖 equals ,因此 Character 中的所有 List 都包含在 HashSet 中)。

关于java - 为什么 containsAll 在第二种情况下确实返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31370219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com