在此脚本中,int和Integer有什么区别?

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数组有什么区别?谢谢。

1个回答

7
Arrays.asList(T...)采用可变参数。当您传递Integer[]时,类型T被推断为IntegerInteger[]的每个元素都作为可变参数的不同参数进行展开。

然而,当您传递一个int[]时,由于int不是对象,所以T被推断为int[]。因此,传递给方法的是一个只有一个元素的数组,其值为int[]。因此,在这两种情况下,可变参数的数量是不同的。因此,在传递int[]时访问索引1将导致错误。

因此,简单来说,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接