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

时间:2014-03-06 17:57:46

标签: java arrays parameter-passing

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

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

example(int[] anArray){
}

据我所知,int的缩写只是在扩大,所以应该自动进行类型转换,不应该吗? 怎么传递呢? 感谢。

3 个答案:

答案 0 :(得分:4)

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

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

如果您想对short[]所做的int[]做同样的事情,则必须提供重载方法,例如example(short[] anArray)。< / p>

JLS, Section 5.1指定所有类型的转化,特别是禁止5.1.12“禁止转化”中未列出的转化:

> Any conversion that is not explicitly allowed is forbidden.

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

答案 1 :(得分:0)

在Java中,数组是对象,只要short数组不扩展int数组,它就不能作为参数传递。

换句话说,是一个短的IS-not-A数组的数组。

答案 2 :(得分:0)

你可以将short与int混合使用标量基元,这被称为加宽,例如你可以这样做:

short x = 4;
int y = x;

没有问题。

根据参考文献的扩展只能使用不带数组的标量类型。

  

原始类型的22个特定转换称为缩小   原始转换:

     

short to byte或char

     

char to byte或short

     

int to byte,short或char

     

long to byte,short,char或int

     

float to byte,short,char,int或long

     

double to byte,short,char,int,long或float

     

缩小的原始转换可能会丢失有关的信息   数值的整体幅度,也可能失去精度   范围。

     

从double到float的缩小基元转换由   IEEE 754舍入规则(§4.2.4)。这种转换可能会失败   精度,但也失去范围,导致从零浮动零   非零双精度和有限双精度浮点无穷大。双NaN   转换为浮点数NaN,双无穷大转换为   同名的浮点无穷大。

     

将有符号整数缩小转换为整数类型T.   简单地丢弃除n个最低位之外的所有位,其中n是数字   用于表示类型T的位数。除了可能的丢失   有关数值大小的信息,这可能会导致   结果值的符号与输入符号不同   值。

     

同样简单地将char转换为整数类型T.   丢弃除n个最低位之外的所有位,其中n是数字   用于表示类型T的位。除了可能丢失   有关数值大小的信息,这可能会导致   结果值为负数,即使是字符   表示16位无符号整数值。

了解更多信息:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3