gpt4 book ai didi

java - 此脚本中的 int 和 Integer 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:46 24 4
gpt4 key购买 nike

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

最佳答案

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

关于java - 此脚本中的 int 和 Integer 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com