3
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public class arraysAsList {


    public static void main(String[] args) {

        String [] arrayA = {"Box","Sun","Clock","Phone"};
        Integer [] arrayB = {21,27,24,7};

        List listStructureA = new ArrayList();
        List listStructureB = new ArrayList();

        listStructureA = Arrays.asList(arrayA);
        listStructureB = Arrays.asList(arrayB);

        System.out.println("My first list : " + listStructureA);
        System.out.println("Sun = " + listStructureA.get(1));
        System.out.println("My second list : " + listStructureB);
        System.out.println("24 = " + listStructureB.get(2));

    }

}

我意识到 int 是一个原始类型,而 Integer 是一个类。但是在这个脚本中,当我尝试使用 int 而不是 Integer 时,我得到“索引超出范围异常”错误。我之前用int创建数组,int数组和Integer数组有什么区别?提前致谢。

4

1 回答 1

7

Arrays.asList(T...)需要可变参数。当您通过 时Integer[],类型T被推断为Integer, 的每个元素都Integer[]被解包为可变参数的不同参数。

但是,当您传递 时int[],因为int不是对象,T所以推断为int[]。因此,传递给该方法的是一个单元素数组,带有 value int[]。因此,两种情况下可变参数的数量是不同的。因此,1当您通过int[].

因此,在一行中 -Integer[]是一个对对象的引用数组,而int[]它本身就是一个对象。

你可以用这个方法做一个简单的测试:

public static <T> void test(T... args) {
    System.out.println(args.length);
}

然后将此方法称为:

int[] arr = {1, 2, 3};
Integer[] arr2 = {1, 2, 3};

test(arr);   // passing `int[]`. length is 1
test(arr2);  // passing `Integer[]`. length is 3
于 2013-10-12T10:52:11.253 回答