2

I guess an other way to ask the same question is how to know the number of null pointing elements in an array?

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?

Do you really have to do something like this in a for loop with i < arrayOfEffectiveSizeTen.length?

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

I couldn't find any duplicate question. Which I found weird. In my particular case it's about Java.

4

2 に答える 2

2

Java では、プリミティブ型と参照型を区別する必要があります。

で配列を初期化するとnew <sometype>[size]、そのすべての要素がデフォルト値に設定されます。int、などの場合long、値は 0 です。したがって、そのbyteような配列に対して平均関数を実行すると、平均 0 が得られます。

型が boolean の場合、初期値はfalseです。

タイプが 、 などのよく知られたタイプを含む任意のオブジェクト タイプ (クラス) でStringあるInteger場合、デフォルト値はすべて null です。

したがって、基本的に、配列を作成するときに、それがプリミティブ型の場合、定義により、その長さは「有効なサイズ」であると言えます。これは、0またはfalseが正当な値であるためです。

参照型の場合、それを作成すると、null 以外の要素がないため、その有効サイズ (定義による) はゼロになります。

ただし、new配列を初期化する唯一の方法ではありません。たとえば、次のようなものを使用できます。

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

これは、プリミティブ型Integerではなく、参照型であるtype の配列であることに注意してください。intで初期化した場合、new Integer[3]すべてヌルになります。しかし、先ほど示したように初期化すると、Integer5、17、32 という数字をそれぞれ含む 3 つのオブジェクトへの参照が含まれます。したがって、有効サイズは長さと同じであると言えます。

ただし、次のような記述も正当であることに注意してください。

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

これらすべてを念頭に置いて、「配列内に null 値がいくつあるかを知るにはどうすればよいですか」という質問に対する答えは次のとおりです。

  1. 配列がプリミティブ型の場合、null 値はありません。ゼロ/偽であっても、正当な値が含まれています。
  2. 配列が参照型であり、それを で初期化した場合new、そのすべての要素は null です。
  3. 配列が参照型であり、それを で初期化した場合{...}、または初期化以降に値を割り当てた場合、ループしてカウントする以外に、配列に含まれる null の数を知る方法はありません。
于 2014-11-23T09:45:44.180 に答える
2

Javaでは、基本的にprimitive types like int,byte,etc.ここで言及した配列を作成するとすぐに、すべての配列要素が値0で自動的に初期化されます。したがって、非null要素の話はここで終わります。

の場合、これらすべての要素が null を指すわけではありませんprimitive data-typesが、 の場合reference datatypes、これらの値は、明示的に指定されていない限り、またはコーダーが他のパラメーターに割り当てて強制しない限り、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
于 2014-11-23T09:25:48.213 に答える