Blog
ブログ
なぜ 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シルバーには一歩近づいてるらしーよ、きっと
結びのメッセージ
Switch with us!
採用エントリー
ご応募はこちら