5

実行時に初期化されるすべての配列は動的であり、コンパイル中に初期化されるすべての配列は静的であるというのは本当ですか?

例えば:

int array[];                 
public main() {      
    array = new int[100];    
}

コンパイラは配列に含まれる要素の数を知っているので、コンパイル中に初期化できますか? または、静的になるようにすべての int に値を与える必要がありますか? このような:

int array[3] { 1, 2, 3};              

また、配列が main() 関数の外で持つべき要素の数を定義することは可能ですか? (すべての int 値を指定せずに) 次のようにします。

int array[100];      
public main() {
}

私は小さなゲームをプログラミングしていますが、非常に高速に実行する必要があります。動的配列の処理にはもう少し時間がかかると読んだので、静的配列で試してみたいのですが、いつ配列が静的または動的になるかわかりません。多くの異なるチュートリアルを検索しましたが、その答えが見つかりませんでした。
読んでくれてありがとう。

4

3 に答える 3

9

動的割り当てと静的割り当ての区別はあいまいです (それが何を意味するかは言語によって多少異なります)。最も一般的な意味では、静的割り当てとは、おそらくコンパイル時に、ある程度のサイズが事前に決定されていることを意味します。

Java では、すべてのオブジェクト (配列を含む) は常に実行時に割り当てられます。これは必ずしも動的であることを意味するわけではありません。実行時に変更できないという意味では静的である可能性があります。例:

public class Test1 {
    public final int[] array1 = new int[10];

    public int[] array2 = new int[20];

    public void setArray2Size(int size) {
         array2 = new int[size];
    }
}

array1 のサイズは 10 で、実行時に変更することはできません。最後のキーワードに注意してください。これにより、「array1」メンバーを 1 回だけ割り当てることができます。したがって、このメンバーに別の配列を割り当てることはできません。

現在、array2 は最終的なものではないため、setArray2Size() メソッドのように、いつでも別の配列をそれに割り当てることができます。最初の代入後に代入がなかった場合、array2 は変更できないという意味で (変更するコードがないため)静的のままですが、宣言によって変更は許可されます。

配列の具体的なインスタンスは、作成後にサイズを変更することはできません( Java には配列のサイズ変更を表現する言語要素はありません)。初心者には少しわかりにくいですが、 array2 のような変数は arrayではありません。配列の参照です。ただし、setArray2Size() メソッドで array2 について示されているように、array2 が保持する参照を別の配列への参照に置き換えることができます。

于 2013-04-18T08:26:43.413 に答える