Arrays.asList的原始类型和包装类型

Tom*_*Tom 12 java

我有以下简单的测试用例

@Test
public void testArraysAsList() {
    Character[] chars1 = new Character[]{'a', 'b'};
    System.out.println(Arrays.asList(chars1).size());


    char[] chars2 = new char[]{'a', 'b'};
    System.out.println(Arrays.asList(chars2).size());

}
Run Code Online (Sandbox Code Playgroud)

结果是:2 1

我不明白Arrays.asList(chars2),为什么要Arrays.asList(char[])制作一个单一的列表,元素为char [].

Ste*_*fan 7

正如@Andy所解释的那样,泛型只适用于引用类型.这意味着List<char>不允许(因此Arrays.asList无法返回List<char>).而是Arrays.asList将其输入解释为单个对象,并返回包含该单个元素的列表.

    Character[] chars1 = new Character[]{'a', 'b'};
    List<Character> list1 = Arrays.asList(chars1);

    char[] chars2 = new char[]{'a', 'b'};
    List<char[]> list2 = Arrays.asList(chars2);
Run Code Online (Sandbox Code Playgroud)

Arrays.asList(chars2)与此String示例比较(输入也是单个元素):

    String test = "test";
    List<String> asList = Arrays.asList(test);
Run Code Online (Sandbox Code Playgroud)

返回size()== 1的列表