例子:
我想知道array[5]
是否包含一个值或为空。
原始数组中的元素不能是空的。它们总会被初始化为某些值(通常是对于int
数组而言,是0
,但这取决于你如何声明数组)。
如果你像下面这样声明数组(例如):
int [] myArray ;
myArray = new int[7] ;
如果没有设置初始值,所有数组元素将默认为0
。
声明数组的另一种语法是
int[] myArray = { 12, 7, 32, 15, 113, 0, 7 };
在这种情况下,数组(大小为七)的初始值是在花括号{}
中给出的。
在Java数组中,不存在“空”元素。如果数组的长度至少为6,则元素5存在并且具有值。如果您没有将其他内容分配给该位置,则它将具有值零,就像对象的未初始化字段一样。
如果它是Object
后代的数组,则可以检查元素是否等于null
。
你必须明确定义“空”的含义。根据数组的数据类型,你可以确定“空”的语义。例如,如果你有一个整数数组,你可以决定0表示为空。或者如果数组是引用类型,则可以将null视为为空。然后,通过比较array[5] == null或array[5] == 0等来检查是否为空。
使用对象而不是基本类型。
Integer[] myArray …
… Objects.isNull( myArray[ 5 ] ) …
… Objects.nonNull( myArray[ 5 ] ) …
int[]
Integer[]
Bill the Lizard的答案是正确的。原始值数组没有空槽,所有槽都包含该数据类型的默认值元素。对于int
,默认值为0
,即零。
如果您想要跟踪数组中的空槽或“洞”,请将数组定义为持有对象引用而不是基本类型值。因此,您需要一个Integer[]
而不是。int[]
Integer[] integers = new Integer[ 12 ] ;
System.out.println( Arrays.toString( integers ) ) ;
null
运行时,我们可以看到所有元素都是null
。这意味着该位置尚未放置任何对象引用。
[null,null,null,null,null,null,null,null,null,null,null,null]
让我们分配一些值。Java提供了auto-boxing,可以自动将int
值转换为Integer
对象。
integers[ 2 ] = 42 ; // Auto-boxing.
integers[ 5 ] = Integer.valueOf( 99 ) ; // Unnecessary, because of auto-boxing.
System.out.println( Arrays.toString( integers ) ) ;
运行后,我们看到有两个插槽被使用,而其余十个插槽(null
)为空闲状态。
[null、null、42、null、null、99、null、null、null、null、null、null]
请参见Ideone.com上的代码运行.
您说:
我想知道
array[5]
是否包含值或为空。
测试null
。
boolean slotAtIndex5HoldsObjectRef = ( null != integers[ 5 ] ) ; // Parens are not necessary, but improve readability.
true
使用Objects
实用类更加优雅。
boolean slot5Filled = Objects.nonNull( integers[ 5 ] ) ;
true
如果未分配任何值,请指定默认值。
Integer x = Objects.requireNonNullElse( integers[ 5 ] , Integer.valueOf( 101 ) ) ;
Integer y = Objects.requireNonNullElse( integers[ 7 ] , Integer.valueOf( 101 ) ) ;
private static final int EMPTY = -1;
然后像这样创建数组:
int[] myArray = new int[size];
Arrays.fill(myArray, EMPTY);
然后要检查一个元素是否为空,可以这样做:
if (myArray[i] == EMPTY)
{
//element i is empty
}