Java で配列が null かどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java の配列が null かどうかをチェックする方法を学びます。まず、配列の参照自体が null かどうかをチェックして、NullPointerException を防ぐ方法を理解します。

その後、より堅牢な配列処理のために、null チェックと長さチェックを組み合わせる方法を探ります。最後に、初期化された空の配列を使って理解度をテストします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/arrays("Arrays") subgraph Lab Skills java/if_else -.-> lab-560003{{"Java で配列が null かどうかをチェックする方法"}} java/arrays -.-> lab-560003{{"Java で配列が null かどうかをチェックする方法"}} end

配列参照が null かどうかをチェックする

このステップでは、Java の配列参照が null かどうかをチェックする方法を学びます。null をチェックすることは、一般的なランタイムエラーである NullPointerException を防ぐための Java プログラミングにおける基本的な手法です。

NullPointerException は、何も参照していない(null である)変数をオブジェクトのように使おうとしたときに発生します。存在しない箱を開けようとするのと同じようなことが、NullPointerException が発生したときに起こることです。

null の配列参照をチェックする方法を示すために、簡単な Java プログラムを作成しましょう。

  1. HelloJava.java ファイルが WebIDE エディタで開かれていない場合は、開きます。

  2. ファイルの内容全体を以下のコードに置き換えます。

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // Declaring an array reference and setting it to null
    
            // Check if the array reference is null before trying to use it
            if (names == null) {
                System.out.println("The 'names' array is null.");
            } else {
                System.out.println("The 'names' array is not null.");
            }
        }
    }

    このコードの新しい部分を見てみましょう。

    • String[] names = null;:この行は、String オブジェクトを保持できる names という名前の配列変数を宣言します。そしてすぐに null を代入します。これは、names 変数が現在メモリ内の実際の配列オブジェクトを参照していないことを意味します。
    • if (names == null):これは if 文で、プログラミングで判断を行うために使用されます。括弧内の条件 (names == null) が真であるかどうかをチェックします。== 演算子は、names 変数が null と等しいかどうかを比較するために使用されます。
    • System.out.println("The 'names' array is null.");:この行は、names == null の条件が真の場合にのみ実行されます。
    • System.out.println("The 'names' array is not null.");:この行は、names == null の条件が偽の場合(つまり namesnull ではない場合)にのみ実行されます。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 修正したプログラムをコンパイルします。ターミナルで以下のコマンドを実行します。

    javac HelloJava.java

    コンパイルが成功すると、何も出力されません。

  5. コンパイルしたプログラムを実行します。

    java HelloJava

    以下の出力が表示されるはずです。

    The 'names' array is null.

    この出力は、私たちのチェックが names 配列参照を正しく null と識別したことを確認します。

null をチェックする方法を理解することは、堅牢な Java コードを書くために重要です。次のステップでは、null の配列の長さにアクセスしようとしたときに何が起こるか、およびチェックを組み合わせる方法を探ります。

null チェックと長さチェックを組み合わせる

前のステップでは、配列参照が null かどうかをチェックする方法を学びました。今回は、null の配列の長さにアクセスしようとしたときに何が起こるか、および null チェックと配列の長さチェックを組み合わせる方法を探ります。

null の配列参照の .length プロパティにアクセスしようとすると、NullPointerException が発生します。これは、存在しないもののプロパティにアクセスしようとしているからです。

これを示すためにプログラムを修正し、その後組み合わせたチェックを追加しましょう。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. ファイルの内容全体を以下のコードに置き換えます。

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // Declaring an array reference and setting it to null
    
            // Attempting to access the length of a null array (will cause an error)
            // int length = names.length; // Uncommenting this line would cause a NullPointerException
    
            // Combine null check and length check
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    新しい部分や変更点は次の通りです。

    • String[] names = null; を残して、null の配列から始めます。
    • コメントアウトされた行 // int length = names.length; は、直接長さにアクセスしようとした場合に何が起こるかを示しています。プログラムがすぐにクラッシュしないように、この行をコメントアウトしています。
    • if (names != null && names.length > 0):これが組み合わせたチェックです。
      • names != null:この部分は、names 配列参照が nullない かどうかをチェックします。
      • &&:これは論理 AND 演算子です。&& の両側の条件が両方とも真である場合にのみ、全体の条件が真になります。
      • names.length > 0:この部分は、names 配列の長さが 0 より大きいかどうかをチェックします。Java の && 演算子の短絡評価の性質により、最初の部分 (names != null) が真の場合にのみこのチェックが行われます。これにより NullPointerException が防止されます。
    • else ブロックは、配列が null または空であることを示すメッセージを出力します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 修正したプログラムをコンパイルします。

    javac HelloJava.java

    再び、成功すると何も出力されません。

  5. コンパイルしたプログラムを実行します。

    java HelloJava

    以下の出力が表示されるはずです。

    The 'names' array is null or empty.

    この出力は、組み合わせたチェックが配列が null または空であることを正しく識別したことを示しています。配列を null に初期化したため、if 条件の最初の部分 (names != null) は偽となり、else ブロックが実行されました。

このようにチェックを組み合わせることは、Java で配列参照を安全に扱う標準的な方法であり、長さなどのプロパティをチェックしたり要素にアクセスしたりする際に NullPointerException に遭遇しないようにします。

初期化された空の配列でテストする

前のステップでは、null の配列参照をチェックし、それを長さチェックと組み合わせる方法を学びました。組み合わせたチェックが null の配列を正しく識別することを確認しました。

今回は、null ではないが空の(長さが 0 の)配列で組み合わせたチェックをテストしましょう。これは、よく遭遇するシナリオの 1 つです。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. names 配列を宣言して初期化する行を修正します。String[] names = null;String[] names = new String[0]; に変更します。組み合わせたチェックを含む if 文を含む残りのコードはそのままにします。

    更新後のコードは次のようになります。

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[0]; // Declaring and initializing an empty array
    
            // Combine null check and length check
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    変更点は次の通りです。

    • String[] names = new String[0];:この行は、サイズが 0 の String オブジェクトの新しい配列を作成します。names 変数は、メモリ内の実際の配列オブジェクトを参照するようになりますが、その配列には要素が含まれていません。つまり、null では ありません
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 修正したプログラムをコンパイルします。

    javac HelloJava.java

    コンパイルが成功すると、何も出力されません。

  5. コンパイルしたプログラムを実行します。

    java HelloJava

    以下の出力が表示されるはずです。

    The 'names' array is null or empty.

    この出力は、配列が null のときと同じです。なぜこうなるのか理解しましょう。if 条件は if (names != null && names.length > 0) です。

    • names != null:この部分は、names が空の配列オブジェクトを参照しているため、今回は真になります。
    • names.length > 0:この部分は、配列の長さが 0 より大きいかどうかをチェックします。配列の長さが 0 であるため、この条件は偽になります。
    • && 条件の 2 番目の部分が偽であるため、全体の条件 (names != null && names.length > 0) は偽と評価され、else ブロックが実行されます。

これは、組み合わせたチェックが null の配列と空の配列の両方を正しく識別することを示しています。これは、配列に要素が含まれている場合にのみ配列を処理したいときに、しばしば望まれる動作です。

まとめ

この実験では、Java の配列参照が null かどうかをチェックして NullPointerException を防ぐ方法を学びました。まず、if 文と == 演算子を使って null の配列参照をチェックする簡単なプログラムを作成しました。

次に、配列が null ではないが空の場合を扱うために、null チェックと長さチェックを組み合わせる方法を探りました。最後に、初期化された空の配列で組み合わせたチェックをテストし、null の配列参照と空の配列の違いを理解しました。