skillup

技術ブログ

Java

配列の参照の仕方

投稿日:

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

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

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

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

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

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

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

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

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

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

-Java

執筆者:


comment

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

関連記事

no image

テストコードの実装

以前、テストコードの大切さを力説しましたが、実際に書いてみると作業の安心度が全く違います。 やはりメソッド単位での確認やデバッグができるのは非常にありがたいです。また時間がたってもテストコードを見るこ …

no image

文字列操作(String系)

Javaの文字列について書きます。 Contents1 StringとStringBuilder1.1 文字列の追加はStringBuilder1.2 文字列の参照はString StringとStr …

no image

CSVの入出力に関して

業務でCSVの入出力と格闘中。 まあよくある頻出の作業だったりするんですが、自前でやるとなかなか面倒です。 面倒なポイントとしては クオートのエスケープ カンマのエスケープ ヘッダーとの結合 ですかね …

no image

arquillianでの外部ライブラリ使用

現状、実務ではDBのテストでは基本的にarquillianを使っています。 arquillianとにかく、重いですね~。 まあglassfishを動かしているので仕方ないかもしれませんが、簡単なテスト …

no image

arquillianでのリソースファイル読み込み

以前、このエントリーでarquillianからライブラリが利用できず、追加のライブラリを導入した、ということを書きました。 実はリソースファイルもそのままですとarquillianからは使用できません …

アーカイブ