我有一个创建列表的程序,需要任何指定的值为0.当我使用int[] humpty_dumpty = new int[20];
时它运行正常但是为了优化列表的大小我将它们设置为Short[]
并且现在我的程序正在破解,因为它将零作为输入(Short[] humpty_dumpty = new Short[20];
正在设置默认值null
)。
有没有办法将它设置为默认值零而不必遍历整个列表(我可以通过for循环来做到这一点但是想知道是否有办法使其行为类似于int)?
答案 0 :(得分:9)
Short[]
和short[]
之间存在差异。后者的元素将初始化为0
,因为short
是“原始”类型,不能为空。大写的Short
类将初始化为null
,因为它实际上只是Object
包裹short
值。
答案 1 :(得分:2)
您可以创建一个基本类型的数组而不是包装器
short []ar=new short[20];
答案 2 :(得分:1)
Short []根本不“优化列表的大小”,它的默认值为null。 short []可以,默认值为零。
答案 3 :(得分:1)
答案,按顺序:
1)要求优先,优化最后。不要使用稀疏数组,或尝试“智能”,除非你特别需要这样做&处理额外的代码/开销。
2)使用常见的方法(可能在实例或静态助手类中)以避免重复使用公共代码。
例如。 short sparseGet(Short [] array,int i){return(array [i]!= null?array [i]:0);}
3)也许使用short []而不是Short []?大写类型不是基元,而是Value Wrapper类 - 并且作为对象引用(指针)存储到实例,因此较慢&更多内存密集型。
4)大写'Value Wrapper'类型 适用于数据库中可能包含空值的地方。例如。如果您/数据库可能没有该字段的数据,那么Person.Age理想情况下是Integer。
干杯。