使用 Java 的数组中元素的索引

2022-09-02 11:58:37

Java 中的以下代码返回 -1。我以为它应该返回3。

int[] array = {1,2,3,4,5,6}; 
System.out.println(Arrays.asList(array).indexOf(4));

你能帮我了解这个函数是如何工作的吗?

谢谢


答案 1

在 Java 5 之前,用于接受 .当泛型和 varargs 被引入到语言中时,它被更改为Arrays.asListObject[]

public static <T> List<T> asList(T... arr)

在您的示例中,不能因为 是基元类型。不幸的是,签名与等于 相反,这是一种引用类型。结果是,您最终会得到一个包含数组的数组,而不是一个整数。TintintTint[]ListList

在 Java 4 中,您的代码不会编译,因为 an 不是 .不编译比产生奇怪的结果更可取,在有效的Java中,Josh Bloch说改造成varargs方法是一个错误。int[]Object[]asList


答案 2

Arrays.asList需要一个(或更多)对象。数组 () 是唯一的对象,因此调用该方法将创建一个仅包含一个对象的列表,即数组。array

调用列表将返回 -1,因为永远不会找到,因为列表包含数组对象,而不是数组包含的数据列表。indexOf4