这会打印 false
List vowelsList=Arrays.asList(new char[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//false
这会打印 true
List vowelsList=Arrays.asList(new Character[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//true
char
被自动添加到我在char数组initailizer中使用的Character
。为什么我会得到不同的结果!
答案 0 :(得分:7)
同时打印
vowelsList.size();
对于两者,你会看到差异;)
<强>扰流:强>
第一种方法的泛型类型是char[]
,因此您将获得一个大小为1的列表。它的类型是List<char[]>
。第二个代码的泛型类型为Character
,因此您的列表将包含与数组一样多的条目。类型为List<Character>
。
为避免这种错误,请勿使用原始类型!以下代码将无法编译:
List<Character> vowelsList = Arrays.asList(new char[]{'a','e','i','o','u'});
以下三行很好:
List<char[]> list1 = Arrays.asList(new char[]{'a','e','i','o','u'}); // size 1
List<Character> list2 = Arrays.asList(new Character[]{'a','e','i','o','u'}); // size 5
List<Character> list3 = Arrays.asList('a','e','i','o','u'); // size 5
答案 1 :(得分:1)
正如@jlordo(+1)所说,你的错误在于理解你的清单包含什么。在第一种情况下,它包含一个char[]
类型的元素,因此它不包含char
元素a
。在第二种情况下,它包含5个Character
元素'a','e','i','o','u',因此结果为true
。