こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

三項演算子

こんにちは。「Javaを復習する初心者」です。今回は三項演算子という演算子のひとつを扱いました。条件演算子とも言います。

今回は構文ではなくて演算子を復習しますが、内容は分岐処理です。三項演算子という演算子があるのですが、if(条件){変数1への代入処理;} else {変数1への代入処理;}という分岐処理を省略したような雰囲気です。if文とelse文の内容が1行で同じ変数へ代入している場合です。

プログラム

以下にフローを書きます。

  1. boolean型変数flagを宣言し、trueで初期化する。
  2. String型変数sを宣言し、nullで初期化する。
    1. flagがtrueの場合、sに”こんにちは。”を格納する。
    2. flagがfalseの場合、sに”さようなら。”を格納する。
  3. sをprintlnで出力する。

上記内容を見るとif elseの構文で書けますが、三項演算子を使うこともできます。

以下はソースと実行結果です。

package test;


public class HelloConditionalOperator {

    public static void main(String[] args) {

        boolean flag = true;
        String s = null;

        s = flag ? "こんにちは。" : "さようなら。";

        System.out.println(s);

    }

}
こんにちは。

解説

「? : 」が三項演算子です。「条件式 : 条件式がtrueのときの式 : 条件式がfalseのときの式」という使い方です。ここでは式というより値そのもの書いてます。flagをfalaseで初期化した場合、「さようなら。」が出力されます。三項演算子の使いかたはExcel関数のIF文と雰囲気が似ていると思います。

null回避で使う方法

三項演算子の他の使い方の例として、Stringがnullのときに他の値に書き換えたい場合では、if文使うより三項演算子のほうが1行で済みます。Stringは参照型変数なのでnullという値で初期化可能なのですが、nullのままの変数でprintlnで出力すると「null」という文字そのものが表示されます。なので三項演算子を使ってnullの場合を他の文字列に直すという場合があると思います(または空文字の場合)。以下にサンプルを挙げました。

package test;


public class HelloConditionalOperatorString {

    public static void main(String[] args) {

        String s = null;

        System.out.println("こんにちは。" + s + "さん。");

        System.out.println("こんにちは。"
                + (s == null ? "名無し" : s)
                + "さん。");

        s = "太郎";
        System.out.println("こんにちは。"
                + (s == null ? "名無し" : s)
                + "さん。");
    }

}
こんにちは。nullさん。
こんにちは。名無しさん。
こんにちは。太郎さん。

上記のプログラムの三項演算子では変数sがnullであるか判定し、falseならば変数s自身になります。オラクルのSQL関数にnvl関数というのがありますが、それと似ている気がします。