繁体   English   中英

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

[英]Why can't I pass in java an array of short to method accepting array of int?

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

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

example(int[] anArray){
}

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

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

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

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

JLS第5.1节规定了所有类型的转换,特别是不允许5.1.12“禁止转换”中未列出的转换:

> Any conversion that is not explicitly allowed is forbidden.

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

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

换句话说,int的短IS-not-A数组的数组。

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

short x = 4;
int y = x;

没有问题。

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

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

短到字节或字符

char到byte或short

int到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM