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

时间:2012-03-22 05:19:59

标签: java arrays

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

是否有必要为inShort[]分配新内存,或者我可以通过哪种方式转发inInt[]

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

4 个答案:

答案 0 :(得分:11)

short inShort[] = new short[100];

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

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

答案 1 :(得分:1)

我认为你必须在转换之前为inShort []分配内存。
但你可能不需要转换。如果内存在您的应用程序中至关重要,或者您不希望在转换后释放inInt [] 只需在带有“(short)inInit [x]”

的表达式中使用inInt []的元素

答案 2 :(得分:1)

  

如何将inInt []转换为inShort []?

您必须创建适当大小的短裤数组,然后复制内容。虽然有复制数组的实用方法,但我不知道会复制基元数组并同时转换值。因此,您很可能需要使用显式for循环进行元素复制。

  

是否有必要为inShort [] ....

分配新内存

是。需要一个新的数组......除非你有一个正确的类型和大小的现有数组可以重复使用。

  

或者我可以通过哪种方式投射到inInt []?

没有。您不能将基本数组类型转换为不同的基本数组类型。 Java语言不允许使用它。


(并且对于记录,这适用于每个Java基本原型类型。)

答案 3 :(得分:0)

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