人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

お世話になっております。JAVAに関しての質問です。
配列を

int num[];?

のように宣言したとします。
そして、この後になんらかの処理が続いたとします。
そして、それから、

num[] = new int [5];?

と設定することはできます。
ですが、?の代わりに

num[] = {1,2,3,4,5};?

などとすることはできません。
?に関しては、?のところで

int num[ ]={1,2,3,4,5};?

ならOKですが、

int num[ ];
num [] = {1,2,3,4,5};?

などという形を取ることもできません。
なぜ?のような初期化の形式だけがOKで
??がNGなのか、疑問に思いました。

ご存知の方おりましたら、ご教授下さいますよう
お願いします。

●質問者: mimio17
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Java NG けが それから 初期化
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tomo_k
●60ポイント

http://www.geocities.jp/turtle_wide/java/javalect/out02.htm

1の場合は、単にnumへのポインタ領域が確保されるだけで配列のインスタンス化はされない。つまり、プログラムとしてはどれだけのメモリを確保していいかわからないのでメモリの確保が行われない。

2の場合はまずint型5個分の領域が確保され(new)(インスタンス化され)なおかつ、1で確保したポインタ領域に確保したメモリ領域の先頭アドレスが書き込まれる。

3の場合は1で実際のメモリ領域は確保していないのにポインタ領域に配列のようなものを書き込もうとしている。型があわないためにエラーとなる。

4の場合の書き方をしたときは、インスタンス化される決まりになっている。

5は1→3と同じなので省略。

◎質問者からの返答

ありがとうございます。

>3の場合は1で実際のメモリ領域は確保していないのにポインタ領域に配列のようなものを書き込もうとしている。型があわないためにエラーとなる。

冷静に考えたら、そうですよね。。

>4の場合の書き方をしたときは、インスタンス化される決まりになっている。

う?ん、やはりそういった"決まり"なんですね。

丁寧に回答して下さり、ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ