java - 为什么我不能在 java 中传递一个短数组到接受 int 数组的方法?

标签 java arrays parameter-passing

我有一个方法,它接受 int[] 参数。我想给它传递一系列短裤。但我得到的只是“不兼容的类型:short[] 无法转换为 int[]”。这是为什么? 一个例子:

short[] arr = new short[2];
arr[0] = 8;
arr[1]=9;
example(arr);

example(int[] anArray){
}

据我所知,short 到 int 只是变宽,所以应该自动进行类型转换,不是吗? 那怎么通过呢? 谢谢。

最佳答案

你不能这样做,因为 short[] 不是 int[]。此外,short 不是 int,只是 Java 允许原始扩展转换以允许将 short 扩展为 >整数。但是,对于原始类型的数组,没有这种原始扩展转换。

这迫使一些核心 Java API 接受许多不同类型的原始数组,例如 Arrays.sort ,它具有许多不同类型的原始数组的重载。

如果你想对 short[] 做你已经对 int[] 做的同样的事情,你必须提供一个重载方法,例如 example(short[] anArray)

JLS, Section 5.1 , 指定所有类型的转换,并特别禁止那些未在 5.1.12“禁止的转换”中列出的:

> Any conversion that is not explicitly allowed is forbidden.

未列出原始数组类型之间的转换,因此不允许。

关于java - 为什么我不能在 java 中传递一个短数组到接受 int 数组的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232318/

相关文章:

python numpy减去作为矩阵的元素

javascript - 如何将函数名称作为参数传递,然后再引用该函数?

arrays - VB.NET,传递数组作为参数的两种方式是否相同?

java - 处理 Android 项目时的 Eclipse 问题

没有STL的C++动态数组

javascript - $localStorage 数组与 $scope 数组不匹配

c++ - 将指针传递给 vector 是否比 vector 本身更快?

java - Java中初始化arraylist的三维数组

不拉伸(stretch)宽度的Java Swing JPanel

java - 打印机如何不覆盖