2

我想问同样问题的另一种方法是如何知道数组中空指针元素的数量?

int[] arrayOfEffectiveSizeTen = new int[10];
// some black box in which the content of the array is changed
calculateAverage(arrayOfEffectiveSizeTen) //how can you do this for instance?

你真的必须在for循环中做这样的事情i < arrayOfEffectiveSizeTen.length吗?

arrayOfEffectiveSizeTen[i] == null ? nullPointingElement++ : elementInArray++;

我找不到任何重复的问题。我觉得很奇怪。在我的特殊情况下,它是关于 Java 的。

4

2 回答 2

2

在Java中,一旦你创建了一个数组,基本上primitive types like int,byte,etc.你在这里提到的,所有的数组元素都会自动初始化为0。因此,非空元素的讨论到此结束。

在 的情况下,所有这些元素都不指向 null primitive data-types,但在 的情况下reference datatypes,这些值指向 null ,除非明确指定 OR 除非编码器通过分配给其他一些参数来强制它这样做。但是,即使这样也会导致 Java 中的运行时异常。因此,防止在没有初始化的情况下使用引用数据类型,因为它会导致 NUllPointerException。

对于参考数据类型,我们做

String sarray[]={"Hello","World"};  
// see here array initialised,else would have produced NullPointerException
for(int i=0;i<sarray.length;array++){
   // do Something
}

因此,对于 Java 中的原始数据类型,我们总是这样做

for(int i=0;i<array.length;array++){
   // do Something
}

这可能总是在 Java 中访问数组元素的方式,根据定义,所有元素都将构成一个数组,因此,

Effective size of Array in Java = Actual size of Array in Java
于 2014-11-23T09:25:48.213 回答
2

在 Java 中,您必须区分原始类型和引用类型。

使用 初始化数组时new <sometype>[size],其所有元素都设置为默认值。对于int,longbyte,该值为 0。因此您可以在这样的数组上运行平均函数,您将得到平均值 0。

如果类型是布尔值,则初始值为false

如果类型是任何对象类型(类),包括众所周知的类型,如String,Integer等,默认值都是空值。

所以基本上,当你创建一个数组时,如果它是原始类型,那么你可以根据你的定义说它的长度是它的“有效大小”,因为0orfalse是合法值。

如果它是引用类型,那么当您创建它时,它的有效大小(根据您的定义)为零,因为没有非空元素。

但是,使用new并不是初始化数组的唯一方法。例如,您可以使用以下内容:

Integer[] intObjects = { 5, 17, 32 };

请注意,这是一个 type 的数组Integer,它是一个引用类型,而不是int原始类型。如果你用它初始化它,new Integer[3]你就会有所有的空值。但是当你按照我展示的那样初始化它时,它包含对三个Integer分别包含数字 5、17 和 32 的对象的引用。所以你可以说它的有效尺寸和它的长度是一样的。

但是请注意,编写如下内容也是合法的:

Integer[] intObjects = { 5, null, 32 };

考虑到所有这些,“我如何知道数组中有多少空值”这个问题的答案是:

  1. 如果数组是原始类型,则没有空值。它包含合法值,即使它们是零/假。
  2. 如果数组是引用类型,并且您用 初始化了它new,那么它的所有元素都是空的。
  3. 如果数组是引用类型,并且您使用 初始化它{...},或者在它初始化后分配了值,那么您无法知道其中有多少空值,除非通过循环和计数。
于 2014-11-23T09:45:44.180 回答