skillup

技術ブログ

Java

配列の参照の仕方

投稿日:

変数が存在しているにもかかわらず値が入っていないときは、プログラミングではNULLという表記をします。(ちなみに空白が入っているのとは違います。)

これはプログラマにとってはほぼ常識的な内容なのですが、先日は配列の参照でこれを私自身理解していないことがありました。

arr[i]が存在しないとき

NULLは確かに値が入っていないということですが、変数自体は定義されています。変数というのは厳密に言えばメモリの番地ですが、その場所に何も入っていない、という状態が定義されているわけです。

これと違うのはそもそもその変数自体が存在しないときです。これは変数だとあまりないのですが、配列では比較的遭遇しやすいポイントかと思います。

例えば上記のようなコードは例外(ArrayIndexOutOfBoundsException)がでます。

NULLチェックをしているのに?と最初は思っていたのですが、そもそも上記ケースの場合arr[3]という場所はどこにも定義されていません。

NULLというのは繰り返しますが、データの場所は定義されているが、何もない状態を指します。上記の場合データの場所自体が定義されていないのでNULLとは違うわけですね・・・・

まあ、PHPだと上記みたいなコードでもNoticeエラーが出るだけでそのまま通ってしまうことと、変数の未定義の状態(いわゆるNULL)と上記の配列のケースが同じなため混同してました・・・

ちなみに上記のようなソースの場合、当たり前ですが配列のインデックスの最大値でループ回数を定義すれば防ぐことができます。

-Java

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

サーブレットのスコープ

JavaEEではスコープアノテーションによって変数のスコープを使い分けられたのですが、サーブレットの場合はプログラムの中で使い分けます。 通常はページ、リクエストとセッション、アプリケーションぐらいで …

no image

HTML&JSなど画面まわり&サーブレット小ネタ

サーブレットでアプリ作ってますが、画面まわりに関していろいろいじっているのでそこら辺のネタなんかを。 Contents1 テーブルの結合2 JSPでの動的HTML→POSTで認識できない3 動的プルダ …

no image

RedmineAPI活用法

自社ではRedmineで基本的にタスク管理をしておりまして、チケット作成に手当がついたりします。 Redmine単体でもいろいろな機能があるのですが、 今月の作成したチケットと完了したチケットを手当と …

no image

イテレーターに関して

Javaの繰り返しでイテレーターという概念がありますね。 今はあまり使われなくなっているようですが、資格の勉強をしていたら出てきたのと、たしなみとして知っておく必要があるため、記述します。 ソース [ …

no image

Annotationについて

Javaのアノテーションですが、よく出てくる割には場面場面でよくでてくるんですけど、根本的にはよく理解できていませんでした。 今もあまりわかっていませんが・・・やはり理解するためには自分で作成するのが …