skillup

技術ブログ

Java

配列の参照の仕方

投稿日:

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

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

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

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

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

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

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

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

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

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

-Java

執筆者:


comment

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

関連記事

no image

サーブレットのスコープ

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

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

String,Integer,Booleanの相互変換

データベースにはbooleanでデータが入っているのに画面では0か1の数字でないと表示ができないときなどがあると思います。 そんな時に文字列と論理値、あるいは文字列と数値、数値と論理値の変換などをする …

no image

Javaビルドツール

JavaではPHPやRubyなどといったインタプリタ言語とは違い、ソースはクラスファイルといわれるファイルに変換する必要があります。この作業をコンパイルと呼びます。最低限この作業をやらないとプログラム …

no image

便利すぎる道具の弊害

現在、Javaのプロジェクトでは会社でNetbeansを使っていますが、IDEを使っているばっかりに理解できていないところがありました。便利すぎる道具の弊害ですね・・・ IDEについて一応説明をしてお …