Blog

ブログ

2024.09.04

なぜ int[] numsの長さは変えられないのか?

またある日のアフロ家

アフロ:よっしゃ、今日もJavaシルバー目指してコーディング勉強といくかー
どれ今日の問題はっと、以下の配列の要素を逆に並べ替えろ?

 

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

 

 

そしたらまずはfor文で回すか

 

 

for(int i=0; i<=5; i++){

 

 

でループっと

 

息子氏:パパ、それだと配列の要素が5個のときしかできないよ

 

アフロ:おっと、そうだな。ちゃんと配列の長さをとってやらんとな

int配列の長さはっと…size()でよかったか?違うなエラーになっとる…

 

息子氏:パパ、int配列の長さはlengthで取れるらしーよ

 

アフロ:おー、そうだったそうだった。現場だとArrayListばっかり使ってるからな。
nums.length()っと
あれ、怒られとる

 

息子氏:そのlengthには()つかないらしーよ

 

アフロ:あれ、でもJavaのメソッドには()つくのに、lengthにはそーいえばついてなかった気が…
なんでだ??

 

息子氏:うん、lengthはメソッドじゃないかららしーよ
話は逸れるけどlength()っていうメソッドはまた別であって、そっちは文字列の長さを返すらしーよ

 

アフロ:size()にlength…
何とか統一してもらえないでしょうか??

 

息子氏:パパ、固定長配列と可変長配列の違いらしーよ
ArrayListみたいな可変長配列はsize()、int[]みたいな固定長配列はlength、区別して使わないといけないらしーよ

 

アフロ:そうだったのかー
そうするとlengthってのはいったい何なんだい??

 

lengthとは何者?

 

息子氏:lengthはね、配列オブジェクトのフィールドらしーよ

 

アフロ:おお、フィールドは前に会社の勉強会でも習ったぞ
そのクラスが持つ情報だな

 

息子氏:nums配列を作ったときに、このlengthフィールドに5が設定されるから、nums.lengthで5が取れるってわけ。らしーよ。

 

アフロ:そういうことか、lengthはフィールド変数名だから()はつかないんだな

 

息子氏:うん、そしてlengthフィールドはfinalで作られてるらしーよ

 

 

アフロ:最初に5で設定したら4とか6にはもう書き換えられないあのfinalか??
だからint[] nums みたいな固定長配列の長さは変えられない、ってこと?

 

息子氏:そういうことらしーよ

試しにぼくが書いたコードでも、こんな感じで怒られてるらしーよ

 

 

なぜ固定長配列を使う?

 

アフロ:そうかー、でも個数を変えられないせいで配列の6個目に数を入れようとしたりしてよくエラーになってしまうんよな
だから固定長配列って不便じゃない?

 

息子氏:ArrayIndexOutOfBoundsExceptionだね。でもね、パパ。
この配列の要素は業務上5個までって仕様で決まってるのに、間違えて6個目が入っちゃったら予期せぬバグになるでしょ、でもエラーが出てくれれば防げるからいいこともあるらしーよ

 

アフロ:そういうことかー
よっしゃ、よくわかったところで今度はlength使うぞー

 

 for(int i=0; i<=nums.length; i++){

 

でループして、配列の中身を逆順にするにはっと…
うん、このあとがわからん

 

息子氏:でもlength使えるようになってJavaシルバーには一歩近づいてるらしーよ、きっと

結びのメッセージ

HOMEGROWINロゴ背景

Switch with us!

採用エントリー

ご応募はこちら