[英]Java Arrays.sort() method takes 1D arrays, but I can pass a 2D array as well then why can't I do int[] a=b(where b is a 2D array)?
[英]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.