在Java中将int[]数组转换为short[]数组

4

我有一个int数组,为其分配了100个元素的空间。还有另一个数组inShort[]。如何将inInt[]转换为inShort[]

需要为inShort[]分配新的内存吗?还是有一种方法可以将其强制转换为inInt[]

int inInt[] = new int[100];
short inShort[];

2
首先,由于您试图将较大的类型保存到较小的类型中,因此您将收到编译器警告。其次,是的,您必须创建一个新的 short 类型数组,以便您可以将值从一个数组复制到另一个数组。据我所知,您无法重新定义数组类型。 - Eddie Paz
4个回答

12
short inShort[] = new short[100];

for(int i = 0; i < 100; i++)
{
    inShort[i] = (short)inInt[i];
}

但是,如果int超出short的范围(即小于-32,768或大于32,767),则很可能会造成short溢出。实际上,很容易造成short溢出,因为int范围从-2,147,483,648到2,147,483,647。


假设有这样一种情况,我需要做与此相反的操作,即我有一个short[]数组,我需要将其转换为int[]数组,我需要遵循类似的过程吗? - Rog Matthews
@user - 是的,这就是你要做的。 - Brian Roach

1
我认为在转换之前,您必须为inShort []分配内存。
但是,如果在您的应用程序中内存很关键,或者您不想在转换后释放inInt [],则可能不需要进行转换。
只需在表达式中使用inInt []的元素,使用“(short)inInit [x]”即可。

1
如何将inInt []转换为inShort []?
您需要创建一个适当大小的shorts数组,并复制内容。虽然有用于复制数组的实用程序方法,但我不知道任何可以同时复制原始值并转换原始数组的方法。因此,您最有可能需要使用显式的for循环进行元素复制。
是否有必要为inShort []分配新内存....
是的。除非您有准备好重复使用的正确类型和大小的现有数组。
还是有一种方法可以将其转换为inInt []?
不。您无法将原始数组类型转换为不同的原始数组类型。Java语言不允许这样做。
(顺便说一句,这适用于每种Java原始类型的数组。)

0

这可能会导致信息丢失,因为与short相比,int类型使用更多的内存。 所以正如Lirik所说,您可以使用他的方法,直到您不丢失信息为止。 为此,您必须确保要转换的整数在short类型的范围内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接