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的集合内,所以写了以下代码
  1. int[] inLiq = {30,40,50,60};
  2. return Arrays.asList(inLiq).contains(o.getOrderStatus());
复制代码
自我Review代码时,验证了下这行代码,发现状态为30时,仍然返回false。
在自我怀疑中调整代码,并验证,代码如下:
  1. Integer[] integerArray = {30, 40, 50,60};
  2. List<Integer> integerList = Arrays.asList(integerArray);
  3. System.out.println(integerList.contains(30)); // true
  4. System.out.println(integerList.contains(Integer.valueOf(30))); // true
  5. System.out.println(integerList.contains(Integer.valueOf(30).intValue())); // true
  6. int[] intArray = {30, 40, 50,60};
  7. List<int[]> intList = Arrays.asList(intArray);
  8. System.out.println(intList.contains(30)); // false
  9. System.out.println(intList.contains(Integer.valueOf(30))); // false
  10. System.out.println(intList.contains(Integer.valueOf(30).intValue())); // false
复制代码
没想很明白,于是问了下ChatGPT。
ChatGPT的回答

Arrays.asList() 方法返回的结果类型取决于传入的参数类型。让我们来看一下这两个情况。
在第一种情况下,integerArray 是一个包装类型(Integer)的数组。当你将它作为参数传递给 Arrays.asList() 方法时,它会将数组的元素视为独立的对象,并返回一个泛型为 Integer 的 List。也就是说,它会将数组中的每个元素转换为相应的 Integer 对象,并将这些对象放入列表中。
  1. Integer[] integerArray = {30, 40, 50, 60};
  2. List<Integer> integerList = Arrays.asList(integerArray);
复制代码
在这种情况下,integerList 是一个泛型为 Integer 的列表,可以通过索引访问、迭代等操作。
而在第二种情况下,intArray 是一个基本类型(int)的数组。当你将它作为参数传递给 Arrays.asList() 方法时,由于基本类型不能作为泛型参数,它会将整个数组作为单个元素放入列表中。也就是说,返回的是一个 List,其中的元素类型是 int[]。
  1. int[] intArray = {30, 40, 50, 60};
  2. 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