Javaでnull判定する方法!Optionalクラスの基礎も解説

目次

Javaにおけるnullとは?

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

Javaには2つのデータ型があります。

  • プリミティブ型(int、char)
  • 参照型(String)

上記のデータ型のうち、プリミティブ型(int、char)にnullはないです。

プリミティブ型は、値を直接格納するデータなのでnullは定義できません。

一方、参照型(String)は値を直接持たず、値のある場所を参照するデータです。

そのため値の参照先がない状態をnullとして定義します。

なお、Javaのnullについてより詳しく知りたい人は次の記事を参考にしてください。

Javaでnull判定する方法!Optionalクラスの基礎も解説

NullPointerExceptionとの関係

Javaにおいて、String型をnullで初期化したまま、メソッドで呼び出そうとするとNullPointerExceptionという例外が発生してしまいます。

NullPointerExceptionは、java.langパッケージ内のクラスです。

NullPointerExceptionが発生すると、エラーのためアプリケーションが終了してしまう可能性があります。

条件分岐などで、nullが入っていないかどうか事前に確認しましょう。

なお、下の記事ではJavaのboolean型について詳しく解説しているので、よければ参考にしてください。

Javaのboolean型とは?使い方やBooleanクラスとの違いも解説

空文字列との違い

空文字の場合、参照先に空の文字列(長さ0の文字列)がある状態なので、nullとは異なります。

違いは下記のとおりです。

  • null:何も定義されていない状態
  • 空文字:空の文字列がある状態

下記の判定式で確認しましょう。

public class Main {
    public static void main(String[] args) throws Exception {
        String str1 = null;
        String str2 = "";
        if (str1 == null) System.out.println("str1はnullです");
        if (str2 == null) System.out.println("str2はnullです");
    }
}

上記の場合、出力結果は「str1はnullです」となります。

空文字はnullとして判定されません。

public class Main {
    public static void main(String[] args) throws Exception {
        String str1 = null;
        String str2 = "";
        if (str2.equals("")) System.out.println("str2は空です");
    }
}

上記の場合、「str2は空です」が出力結果です。

nullをequalsで判定してしまうと、String型にnullを代入したままの状態なので「NullPointerException」が発生してしまいます。

public class Main {
    public static void main(String[] args) throws Exception {
        String str1 = null;
        String str2 = "";
        if (str1.equals(null)) System.out.println("str1はnullです");
    }
}

上記ではNullPointerExceptioが発生してしまいます。

Javaにおけるnullの判定方法

Javaでのnullの判定方法をご紹介します。

public class Main {
    public static void main(String[] args) throws Exception {
        String str1 = null;
        String str2 = "";
        if (str1 == null) System.out.println("str1はnullです");
        if (str2 == null) System.out.println("str2はnullです");
    }
}

出力結果は「str1はnullです」です。

このように「==」や「!=」などの比較演算子でnullを判定することができます。

JavaにおけるOptionalクラスの基礎知識

Java8以降でOptionalクラスが追加されたことで、新しいnullの扱い方ができるようになりました。

Java8以降ではOptionalクラスを用いたnullの判定が推奨されます。

Optionalクラスは、「java.util.Optionalパッケージ」をインストールすることで使用可能です。

ここでは、Optionalクラスの代表的な使い方を紹介します。

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        // Optionalオブジェクトの生成
        String str = "test";
        Optional optional = Optional.ofNullable(str);
        // nullチェックと値の取得
        String result = optional.orElse("値はnullです");
        System.out.println("結果: " + result);
    }
}

上記コードでは、Optional.orElseメソッドを使ってnullかどうかをチェックしています。

出力結果は「結果: test」です。

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        String str = null;
        Optional optional = Optional.ofNullable(str);
        String result = optional.orElse("値はnullです");
        System.out.println("結果: " + result);
    }
}

上記の場合は「結果: 値はnullです」が出力されます。

nullかnull以外かを判定できていることを確認できました。

なお、下の記事ではJavaのメソッドについて詳しく解説しているので、よければ参考にしてください。

Javaのメソッドとは?呼び出し方や使い方も紹介

Javaプログラミングのスキルを活かして収入を増やすなら

なかには、副業での収入獲得やフリーランスへの独立を目的にJavaプログラミングのスキル習得に励んでいる人もいますよね。

ただ、身につけたスキルをどう収入UPに繋げればいいのか、イメージが湧かない人もいるはず。

そんな方は、ぜひフリーランスのミカタをご活用ください。

出典:フリーランスのミカタ

フリーランスのミカタは、平均単価80万円以上の案件を取り揃える、ITエンジニアに特化したフリーランスエージェントです。具体的には、次のような週3回からフルリモートで請け負える案件を豊富に掲載しています。

また希望年収や稼働時間だけでなく、扱うプログラミング言語などを細かく指定して案件を探せるため、自分にあう仕事を見つけやすいサイト仕様になっています。

ただし、上記のような案件は条件として2〜3年の実務経験が求められるケースが多いです。そのため、応募する際はどれくらいの経験が必要なのかを前もってチェックしておきましょう。

フリーランスのミカタを活用すれば、中・長期的な安定収入が得られる案件が見つかりますよ。

どんな案件が掲載されているか気になる人は、下のボタンから自分にあう案件を探してみてください。

[center][btn href=”https://freelance-mikata.com/ad/media_redirect_02/redirector?utm_source=ownedmedia&utm_medium=media&utm_campaign=lp” class=”cubic1 green-bc shadow”]公式サイトで詳細を見る[/btn][/center]

まとめ

nullは多くの開発者を悩ませます。

そのため上級者であろうと注意しなければなりません。

本記事では、nullの基本や判定方法などを解説しました。

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

なお、下の記事ではJavaのコンパイルについて詳しく解説しているので、よければ参考にしてください。

Javaのコンパイルとは?実行方法からjavacコマンドの基礎知識も紹介

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

クラウドエンジニア歴4年。
AWS・Azure・GCPなど主要クラウドは一通り触っているが一番得意なのはAWS。
最近ではTerraformでIaCもやっていて、某AWS書籍で執筆の経験も。三度の飯よりクラウドが好き。

目次