1

リストを作成するプログラムがあり、割り当てられた値を0にする必要があります。実行すると正常に実行されint[] humpty_dumpty = new int[20]; ますが、リストのサイズを最適化するために設定しましたShort[]が、入力としてゼロを使用するため、プログラムが壊れています(そしてShort[] humpty_dumpty = new Short[20];デフォルト値を作っていますnull)。

リスト全体を反復処理せずにデフォルトのゼロに設定する方法はありますか(forループを介してこれを行うことができますが、その動作をintに似たものにする方法があるかどうか疑問に思っていました)?

4

4 に答える 4

9

Short[]aとaには違いがありshort[]ます。後者の要素は「プリミティブ」タイプであり、nullにすることはできない0ため、に初期化されます。short大文字のShortクラスはnull、実際には値Objectをラップしているだけなので、に初期化されshortます。

于 2012-05-01T02:34:03.067 に答える
2

ラッパーの代わりにプリミティブ型の配列を作成できます。

short []ar=new short[20];
于 2012-05-01T02:34:42.457 に答える
1

Short []は、「リストのサイズを最適化する」ことはまったくなく、デフォルト値はnullです。short []はそうし、デフォルト値はゼロです。

于 2012-05-01T02:50:48.760 に答える
1

回答、順番に:

1)要件を最初に、最適化を最後に。特にこれを実行して余分なコード/オーバーヘッドを処理する必要がない限り、スパース配列を使用したり、「スマート」にしようとしたりしないでください。

2)一般的なコードの繰り返しを避けるため に、一般的なメソッド(おそらくインスタンスまたは静的ヘルパークラス)を使用します。

例えば。short sparseGet(Short [] array、int i){return(array [i]!= null?array [i]:0);}

3)おそらくShort[]ではなくshort[]を使用しますか?大文字の型はプリミティブではなく、Value Wrapperクラスであり、インスタンスへのオブジェクト参照(ポインター)として格納されるため、速度が遅く、メモリを大量に消費します。

4)データベースからのnull値がある場合は、大文字の「値ラッパー」タイプが適切です。例えば。Person.Ageは、あなた/データベースにそのフィールドのデータがない可能性がある場合、理想的には整数になります。

乾杯。

于 2012-05-01T03:48:05.147 に答える