与int数组不同,其中0用作占位符,是否有未使用的数组索引的占位符?我无法弄清楚我的生活如何使用for来查找我的数组的逻辑大小。谢谢!
答案 0 :(得分:3)
对象类型数组(String[]
,Thread[]
,Object[]
等)中条目的默认值为null
。这个值类似于0
数组中int[]
的示例。
E.g:
Object[] objectArray = new Object[10];
System.out.println(objectArray[0] == null); // "true"
0
中的int[]
与null
中的Object[]
之间存在差异,当然:0
是您可以使用的有效int
对于您可以使用int
的所有内容。当然,null
是一个不引用任何对象的对象引用,因此对于该对象引用实际上唯一可以做的就是查看它是null
。 : - )
答案 1 :(得分:1)
确定数组的“逻辑”大小可能很棘手,主要是因为在所有情况下,数组必须具有有效值。没有“占位符”值表示“这里没有价值”。
原始整数类型的数组(byte
,char
,short
,int
和long
)被初始化为这些类型的默认值,0 ,正如你所说。
浮点类型的数组(float
和double
)被初始化为这些类型的默认值,0.0。
boolean
的数组初始化为false
。
任何Object
类型的数组都会初始化为null
。
在所有这些情况下,相应类型的变量可以采用默认值。那么如何判断这些是真正的值恰好等于默认值,还是应用程序实际上没有提供的默认值?您必须定义“占位符”对您的应用程序的含义,并确保相应地初始化阵列。
如果您的数组要保留数字,您可能会做的一件事就是使它们成为相应的Object
类型,即使用Integer[]
而不是int[]
。这将导致数组初始化为null
而不是0.在这样的数组中出现的任何0都是合法的0而不是初始化的工件。
如果null
是合法值,您可以考虑使用Optional<Foo>[] value =
而不是Foo[] value =
。然后肯定没有设置null
的任何数组元素。如果您使用value[n] != null
,则可以检查value[n].isPresent()
以确定是否存在真实的Foo
。
这里有很多可能性,但最重要的是你必须构建自己的机制。 Java中没有像“占位符值”这样的内容。
答案 2 :(得分:0)
arrayref.length
是数组的大小。如果未获取/未指定,则基于数组类型,它将具有null
或ZERO
。
答案 3 :(得分:0)
int [] a = new int [10];
a[0] = 1;
a[1] = 2;
int logicalLength = 0;
for(int i=0; i<a.length; i++){
if(a[i] != 0){ // Here a[i] != 0 changes depending on the type of the array
logicalLength++;
}
}
System.out.println(logicalLength);
System.out.println(a.length);
在数组中,我们不分配任何值,然后存储默认值。 int的默认值为0,double为0.0,String为null。