我有一个程序可以创建列表,并且需要将任何分配的值设为 0。当我使用它时它运行良好,int[] humpty_dumpty = new int[20];
但是为了优化我设置它们的列表的大小,Short[]
现在我的程序正在中断,因为它以零作为输入(并且Short[] humpty_dumpty = new Short[20];
正在制作默认值null
)。
有没有办法将其设置为默认零而不必遍历整个列表(我可以通过 for 循环做到这一点,但想知道是否有办法使其行为类似于 int)?
我有一个程序可以创建列表,并且需要将任何分配的值设为 0。当我使用它时它运行良好,int[] humpty_dumpty = new int[20];
但是为了优化我设置它们的列表的大小,Short[]
现在我的程序正在中断,因为它以零作为输入(并且Short[] humpty_dumpty = new Short[20];
正在制作默认值null
)。
有没有办法将其设置为默认零而不必遍历整个列表(我可以通过 for 循环做到这一点,但想知道是否有办法使其行为类似于 int)?
Short[]
a和 a之间是有区别的short[]
。后者的元素将被初始化为,0
因为short
是“原始”类型并且不能为空。大写的Short
类将被初始化,null
因为它实际上只是一个Object
包装short
值。
您可以创建一个原始类型的数组而不是包装器,
short []ar=new short[20];
答案,按顺序:
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 理想情况下是整数,如果您/数据库可能没有该字段的数据。
干杯。
Short[] 根本不“优化列表的大小”,它的默认值为 null。short[] 确实如此,并且它的默认值为零。