IT评测·应用市场-qidao123.com
标题:
ChatGPT还是有点东西的-public static <T> List<T> Arrays.asList(T... a)
[打印本页]
作者:
千千梦丶琪
时间:
2023-7-7 18:23
标题:
ChatGPT还是有点东西的-public static <T> List<T> Arrays.asList(T... a)
背景
业务开发需要判断业务状态是否在30、40、50、60的集合内,所以写了以下代码
int[] inLiq = {30,40,50,60};
return Arrays.asList(inLiq).contains(o.getOrderStatus());
复制代码
自我Review代码时,验证了下这行代码,发现状态为30时,仍然返回false。
在自我怀疑中调整代码,并验证,代码如下:
Integer[] integerArray = {30, 40, 50,60};
List<Integer> integerList = Arrays.asList(integerArray);
System.out.println(integerList.contains(30)); // true
System.out.println(integerList.contains(Integer.valueOf(30))); // true
System.out.println(integerList.contains(Integer.valueOf(30).intValue())); // true
int[] intArray = {30, 40, 50,60};
List<int[]> intList = Arrays.asList(intArray);
System.out.println(intList.contains(30)); // false
System.out.println(intList.contains(Integer.valueOf(30))); // false
System.out.println(intList.contains(Integer.valueOf(30).intValue())); // false
复制代码
没想很明白,于是问了下ChatGPT。
ChatGPT的回答
Arrays.asList() 方法返回的结果类型取决于传入的参数类型。让我们来看一下这两个情况。
在第一种情况下,integerArray 是一个包装类型(Integer)的数组。当你将它作为参数传递给 Arrays.asList() 方法时,它会将数组的元素视为独立的对象,并返回一个泛型为 Integer 的 List。也就是说,它会将数组中的每个元素转换为相应的 Integer 对象,并将这些对象放入列表中。
Integer[] integerArray = {30, 40, 50, 60};
List<Integer> integerList = Arrays.asList(integerArray);
复制代码
在这种情况下,integerList 是一个泛型为 Integer 的列表,可以通过索引访问、迭代等操作。
而在第二种情况下,intArray 是一个基本类型(int)的数组。当你将它作为参数传递给 Arrays.asList() 方法时,由于基本类型不能作为泛型参数,它会将整个数组作为单个元素放入列表中。也就是说,返回的是一个 List,其中的元素类型是 int[]。
int[] intArray = {30, 40, 50, 60};
List<int[]> intList = Arrays.asList(intArray);
复制代码
在这种情况下,intList 是一个泛型为 int[] 的列表,它包含了一个元素,即原始的 int 数组。因此,你无法通过索引访问数组的元素,而只能通过 intList.get(0) 访问整个数组。
总结来说,Arrays.asList() 方法根据传入的参数类型决定返回的结果类型,基本类型数组会被视为单个元素放入列表中,而包装类型数组会将每个元素都作为独立对象放入列表中。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4