使用Character vs char数组初始化

Ani*_*dha 7 java autoboxing

这打印错误

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

这打印是真的

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

charCharacter我在char数组initailizer中使用的自动装箱.为什么我得到不同的结果!

jlo*_*rdo 8

还打印

vowelsList.size();

对于两者,你会看到差异;)

扰流板:

第一种方法的泛型类型是char[],因此您将获得一个大小为1的列表.它的类型是List<char[]>.第二个代码的泛型类型是Character,因此您的列表将包含与数组一样多的条目.类型是List<Character>.


为避免这种错误,请不要使用原始类型!以下代码将无法编译:

List<Character> vowelsList = Arrays.asList(new char[]{'a','e','i','o','u'});
Run Code Online (Sandbox Code Playgroud)

以下三行很好:

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
Run Code Online (Sandbox Code Playgroud)