Javaでnullを正しく扱おう!新しいOptionalクラスも活用
  • facebookページ
  • twitterページ
  • 2021.01.22

    Javaでnullを正しく扱おう!新しいOptionalクラスも活用

    nullとは?

    nullは、変数の値に何も定義されていない(何も入っていない)状態を表す特殊は値です。

    Javaのデータ型は大きく「プリミティブ型」と「参照型」の2つに分類されます。
    整数を表す int型、文字1つを格納する char型など、値を直接入れるものはプリミティブ型となり、 String型やファイルを読み込む FileInputStreamなどのクラスは参照型になります。

    そして nullを格納できるのは、参照型の変数だけでプリミティブ型の変数には nullを入れることはできません。

    nullを変数に設定

    nullを変数に設定するサンプルコードをみてみましょう。 nullはダブルクォーテーションなども不要で、そのまま nullと記述します。

    NullPointerException

    nullが設定された変数で、メソッドの呼び出しを行うと NullPointerExceptionが発生します。

    null判定をしてからメソッドを呼び出す

    NullPointerExceptionが発生すると、当然ながらエラーで最悪の場合、アプリケーションが以上終了します。

    そのため、一般的に nullが格納される可能性がある変数のメソッド呼び出しは、事前に中身が nullでないかチェックしてから呼び出しをおこない、 NullPointerExceptionを回避します。

    上のコードを実行すると次のような結果になります。

    intやcharでもnullを扱いたい

    冒頭でも伝えましたが、プリミティブ型の int型や char型の変数には、 nullを入れることはできません。(以下のようにコンパイルエラーになります)

    intcharでも nullを扱いたい場合は、それをラップする IntegerCharacterなどの参照型のラッパークラスを使用します。

    各プリミティブ型に対応するラッパークラスの対応は次の表の通りです。

    プリミティブ型 ラッパークラス
    boolean Boolean
    byte Byte
    char Character
    short Short
    int Integer
    float Float
    long Long
    double Double

     

    実際に intのラッパークラスである Integer型の変数に nullをセットしてみましょう。

    nullと空文字(Empty)は異なるもの

    nullと空文字(Empty)は似ているようで同じものと勘違いしてしまいそうですが、次のリストのように明確な違いがあり、異なるものです。

    • NULL:何も定義されていない(何も入っていない)状態
    • 空文字:長さ0の文字列

    実際に nullと空文字が格納された変数を作成して、 null判定を行うサンプルコードを作成してみましょう。

    上のコードを実行すると次のような結果となります。

    str2の判定で、 null以外と判定されてコンソールに何も出力されていないことから、空文字は nullとは異なるものだと言うことがわかります。

    Optionalを使ったnullの新しい扱い方

    Java 8で java.util.Optionalクラスが追加され、 nullの新しい扱い方ができるようになりました。

    java.util.Optionalは、 nullの可能性がある変数をうまく取り扱うクラスで、例えば次のコードのように、 nullの判定と nullでない場合のメソッド呼び出しを1行で記述できたりします。

    今回は、簡単に Optionalクラスの代表的な使い方を紹介します。

    「Optional.ifPresent」メソッド

    値が null以外の場合のみ、引数で指定しらラムダ式が実行されるメソッドです。

    「Optional.ifPresentOrElse」メソッド

    値が null以外の場合のみ、引数で指定しらラムダ式が実行されるメソッドです。

    ポテパンダの一言メモ

    java.util.Optional.ifPresentOrElseメソッドは、Java 9で追加されたAPIです。Java 8の java.util.Optionalクラスにはメソッドは存在しないため注意しましょう。

    nullを理解してバグの起きないプログラムを作ろう

    nullと一体何なのかという話から、 nullを判定する方法や、新しい Optionalクラスの使い方まで紹介してきました。

    nullを正しく理解し、 NullPointerExceptionなどのエラーが発生しないプログラムを作成しましょう。

    【関連記事】
    【Java】nullチェック忘れを未然に防ぐOptionalクラスについてわかりやすく解説します。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE