配列を
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なのか、疑問に思いました。
ご存知の方おりましたら、ご教授下さいますよう
お願いします。
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の場合の書き方をしたときは、インスタンス化される決まりになっている。
う~ん、やはりそういった"決まり"なんですね。
丁寧に回答して下さり、ありがとうございました!