8

这打印错误

List vowelsList=Arrays.asList(new char[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//false

这打印真实

List vowelsList=Arrays.asList(new Character[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//true

charCharacter我在 char 数组初始化程序中使用的自动装箱。为什么我得到不同的结果!

4

2 回答 2

9

也打印

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
于 2013-04-09T17:55:44.497 回答
1

正如@jlordo (+1) 所说,您的错误在于理解您的列表包含什么。在第一种情况下,它包含一个 type 元素char[],因此它不包含charelement a。在第二种情况下,它包含 5 个Character元素 'a','e','i','o','u',所以结果是true.

于 2013-04-09T17:59:31.790 回答