1

我有一个程序可以创建列表,并且需要将任何分配的值设为 0。当我使用它时它运行良好,int[] humpty_dumpty = new int[20]; 但是为了优化我设置它们的列表的大小,Short[]现在我的程序正在中断,因为它以零作为输入(并且Short[] humpty_dumpty = new Short[20];正在制作默认值null)。

有没有办法将其设置为默认零而不必遍历整个列表(我可以通过 for 循环做到这一点,但想知道是否有办法使其行为类似于 int)?

4

4 回答 4

9

Short[]a和 a之间是有区别的short[]。后者的元素将被初始化为,0因为short是“原始”类型并且不能为空。大写的Short类将被初始化,null因为它实际上只是一个Object包装short值。

于 2012-05-01T02:34:03.067 回答
2

您可以创建一个原始类型的数组而不是包装器,

short []ar=new short[20];
于 2012-05-01T02:34:42.457 回答
1

答案,按顺序:

1)需求第一,优化最后。不要使用稀疏数组,或者尝试“聪明”,除非您特别需要这样做并处理额外的代码/开销。

2) 使用通用方法(可能在 Instance 或 Static Helper中)以避免重复通用代码。

例如。short sparseGet (Short[] array, int i) {return (array[i] != null ? array[i] : 0);}

3) 也许使用 short[] 而不是 Short[]?大写类型不是原始类型,而是 Value Wrapper 类 - 并存储为实例的对象引用(指针),因此速度较慢且内存密集。

4) 大写的“Value Wrapper”类型适用于您可能具有来自数据库的空值的情况。例如。Person.Age 理想情况下是整数,如果您/数据库可能没有该字段的数据。

干杯。

于 2012-05-01T03:48:05.147 回答
1

Short[] 根本不“优化列表的大小”,它的默认值为 null。short[] 确实如此,并且它的默认值为零。

于 2012-05-01T02:50:48.760 回答