我想另一种问同样问题的方法是如何知道数组中空指向元素的数量?
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的。
答案 0 :(得分:2)
在Java中,只要你创建一个数组,基本上就是你在这里提到的primitive types like int,byte,etc.
,所有数组元素都会自动初始化为0.因此,非空元素的讨论就此结束。
在primitive data-types
的情况下,所有这些元素都不指向null,但是在reference datatypes
的情况下,除非明确指定OR,否则这些值指向null,除非编码器强制它通过赋值来执行一些其他参数。但是,即使这会导致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
答案 1 :(得分:2)
在Java中,您必须区分基本类型和引用类型。
使用new <sometype>[size]
初始化数组时,其所有元素都设置为默认值。对于int
,long
,byte
等,值为0.因此,您可以在此类数组上运行平均函数,并且平均值为0.
如果类型为布尔值,则初始值为false
。
如果类型是任何对象类型(类),包括String
,Integer
等众所周知的类型,则默认值都为空。
所以基本上,当你创建一个数组时,如果它是一个原始类型,那么你可以根据你的定义说它的长度是它的有效大小&#34;,因为{{ 1}}或0
是合法值。
如果它是引用类型,那么当你创建它时,它的有效大小 - 按你的定义 - 为零,因为没有非null元素。
但是,使用false
并不是初始化数组的唯一方法。例如,您可以使用以下内容:
new
请注意,这是一个Integer[] intObjects = { 5, 17, 32 };
类型的数组,它是一种引用类型,而不是基本类型Integer
。如果您使用int
初始化它,那么您将拥有所有空值。但是当我按照我展示的那样对它进行初始化时,它包含对三个new Integer[3]
对象的引用,这三个对象分别包含数字5,17和32。所以你可以说它的有效尺寸与它的长度相同。
但是,请注意,写下这样的内容也是合法的:
Integer
考虑到所有这些,问题的答案&#34;我怎么知道数组中有多少空值&#34;是:
Integer[] intObjects = { 5, null, 32 };
初始化它,则其所有元素都为空。new
初始化它,或者自初始化以来已分配了值,则除了循环和计数之外,您无法知道其中有多少空值。 / LI>
醇>