Java中的以下代码返回-1.我认为它应该返回3.
int[] array = {1,2,3,4,5,6};
System.out.println(Arrays.asList(array).indexOf(4));
Run Code Online (Sandbox Code Playgroud)
你能帮我理解这个功能是如何工作的吗?
谢谢
Pau*_*ton 13
在Java 5之前,Arrays.asList曾经接受过Object[].当泛型和varargs被引入语言时,这被改为
public static <T> List<T> asList(T... arr)
Run Code Online (Sandbox Code Playgroud)
在您的示例中,T不能int因为int是原始类型.不幸的是,签名匹配T等于int[]相反,这是一个引用类型.结果是你最终得到一个List包含数组,而不是List整数.
在Java 4中,您的代码不会编译,因为int[]它不是Object[].不编译比产生奇怪的结果更可取.在Effective Java中,Josh Bloch说改造asList为varargs方法是一个错误.
Arrays.asList期待一个对象(或更多).您的array(array)是唯一的对象,因此调用该方法将创建一个只有一个对象的列表,这是您的数组.
调用indexOf列表将返回-1,因为4您的列表包含数组对象,而不是数组包含的数据列表,因此永远不会找到.
int[] array = {1,2,3,4,5,6};
Arrays.stream(array).boxed().collect(Collectors.toList()).indexOf(4);
Run Code Online (Sandbox Code Playgroud)
在保持原件的同时应该做你想做的事int[].
你得到IntStream它,将它装入a Stream<Integer>,将其收集到a List<Integer>然后可以进行.indexOf()搜索.
| 归档时间: |
|
| 查看次数: |
12496 次 |
| 最近记录: |