はじめに
この実験では、Java の配列が null かどうかをチェックする方法を学びます。まず、配列の参照自体が null かどうかをチェックして、NullPointerException
を防ぐ方法を理解します。
その後、より堅牢な配列処理のために、null チェックと長さチェックを組み合わせる方法を探ります。最後に、初期化された空の配列を使って理解度をテストします。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Java の配列が null かどうかをチェックする方法を学びます。まず、配列の参照自体が null かどうかをチェックして、NullPointerException
を防ぐ方法を理解します。
その後、より堅牢な配列処理のために、null チェックと長さチェックを組み合わせる方法を探ります。最後に、初期化された空の配列を使って理解度をテストします。
このステップでは、Java の配列参照が null
かどうかをチェックする方法を学びます。null
をチェックすることは、一般的なランタイムエラーである NullPointerException
を防ぐための Java プログラミングにおける基本的な手法です。
NullPointerException
は、何も参照していない(null
である)変数をオブジェクトのように使おうとしたときに発生します。存在しない箱を開けようとするのと同じようなことが、NullPointerException
が発生したときに起こることです。
null
の配列参照をチェックする方法を示すために、簡単な Java プログラムを作成しましょう。
HelloJava.java
ファイルが WebIDE エディタで開かれていない場合は、開きます。
ファイルの内容全体を以下のコードに置き換えます。
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
の条件が偽の場合(つまり names
が null
ではない場合)にのみ実行されます。ファイルを保存します(Ctrl+S または Cmd+S)。
修正したプログラムをコンパイルします。ターミナルで以下のコマンドを実行します。
javac HelloJava.java
コンパイルが成功すると、何も出力されません。
コンパイルしたプログラムを実行します。
java HelloJava
以下の出力が表示されるはずです。
The 'names' array is null.
この出力は、私たちのチェックが names
配列参照を正しく null
と識別したことを確認します。
null
をチェックする方法を理解することは、堅牢な Java コードを書くために重要です。次のステップでは、null
の配列の長さにアクセスしようとしたときに何が起こるか、およびチェックを組み合わせる方法を探ります。
前のステップでは、配列参照が null
かどうかをチェックする方法を学びました。今回は、null
の配列の長さにアクセスしようとしたときに何が起こるか、および null
チェックと配列の長さチェックを組み合わせる方法を探ります。
null
の配列参照の .length
プロパティにアクセスしようとすると、NullPointerException
が発生します。これは、存在しないもののプロパティにアクセスしようとしているからです。
これを示すためにプログラムを修正し、その後組み合わせたチェックを追加しましょう。
WebIDE エディタで HelloJava.java
ファイルを開きます。
ファイルの内容全体を以下のコードに置き換えます。
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
または空であることを示すメッセージを出力します。ファイルを保存します(Ctrl+S または Cmd+S)。
修正したプログラムをコンパイルします。
javac HelloJava.java
再び、成功すると何も出力されません。
コンパイルしたプログラムを実行します。
java HelloJava
以下の出力が表示されるはずです。
The 'names' array is null or empty.
この出力は、組み合わせたチェックが配列が null
または空であることを正しく識別したことを示しています。配列を null
に初期化したため、if
条件の最初の部分 (names != null
) は偽となり、else
ブロックが実行されました。
このようにチェックを組み合わせることは、Java で配列参照を安全に扱う標準的な方法であり、長さなどのプロパティをチェックしたり要素にアクセスしたりする際に NullPointerException
に遭遇しないようにします。
前のステップでは、null
の配列参照をチェックし、それを長さチェックと組み合わせる方法を学びました。組み合わせたチェックが null
の配列を正しく識別することを確認しました。
今回は、null
ではないが空の(長さが 0 の)配列で組み合わせたチェックをテストしましょう。これは、よく遭遇するシナリオの 1 つです。
WebIDE エディタで HelloJava.java
ファイルを開きます。
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
では ありません。ファイルを保存します(Ctrl+S または Cmd+S)。
修正したプログラムをコンパイルします。
javac HelloJava.java
コンパイルが成功すると、何も出力されません。
コンパイルしたプログラムを実行します。
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
の配列参照と空の配列の違いを理解しました。