【初心者向け】Javaの演算子を徹底解説

【初心者向け】Javaの演算子を徹底解説

Java を勉強しているときにまず一番に戸惑うのが、=+などの演算子が、算数や数学での使い方と微妙に異なる、 という点ではないでしょうか。

Java のプログラミングを行う上では、演算子を使いこなすことが欠かせません。演算子を理解して、いろいろな処理をスマートにプログラミングできるようになりましょう!

今回は Java の演算子について、詳しく解説をしていこうと思います!

目次
  1. Javaの演算子とは
  2. Javaの演算子の種類
  3. 算術演算子
  4. インクリメント・デクリメント演算子
  5. 代入演算子
  6. 比較演算子
  7. 論理演算子
  8. ビット演算子
  9. Javaの演算子の注意点
  10. 基本型の代入と参照型の代入の違いを理解しておこう
  11. 演算子には優先順位がある
  12. Java の学習をしたい人にオススメ記事
  13. まとめ

Javaの演算子とは

Java には様々な演算子があります。計算に使う演算子、変数に代入をする演算子、条件と合致するかどうかを比較する演算子などがあります。

演算子というのは算数や数学で使う、+(プラス)や-(マイナス)、=(イコール)、などの記号のことです。算数や数学でも使われる記号ですね。異なるのは、数字だけでなく文字や、データの参照なども、この演算子で扱うことができるという点です。

 

Javaの演算子の種類

それでは詳しく、演算子の種類を見ていきましょう。

算術演算子

算術演算子 説明
+ 加算
- 減算
* 乗算(掛け算)
/ 除算(割り算)
% あまり

算術演算子というのは計算をする演算子ということです。こちらは算数や数学で使った演算子と同じような使い方をしますが、 java 特有の使い方もあるのでサンプルを見てみましょう。

public class Main {
    public static void main(String[] args) throws Exception {
        int a = 10;
        int b = 2;
        int c;


        //加算
        c = a+b;
        System.out.println("a+b=" + c);
        //減算
        c = a-b;
        System.out.println("a-b=" + c);
        //乗算
        c = a*b;
        System.out.println("a*b=" + c);
        //除算
        c = a/b;
        System.out.println("a/b=" + c);
        //あまり
        c = a%b;
        System.out.println("a%b=" + c);

    }


}

あまりという表現は、初めて見る方もおられるかもしれませんね。Javaでは、条件分岐や金額計算などでよく使うことになりますよ。さて、プラスやマイナスを文字列に使った場合はどうなるのでしょうか?

public class Main {
    public static void main(String[] args) throws Exception {

        String d = "おはよう";
        String e = "こんにちは";
        String f = new String();

        //表示結果:おはようこんにちは
        f = d+e;
        System.out.println(f);

        //エラーとなる
//        f = d-e;
//        System.out.println(f);
    }
}

プラスを使うと文字列が連結されて表示されました。マイナスの場合は残念ながらコンパイルエラーとなります。

インクリメント・デクリメント演算子

1ずつプラスする、または1ずつマイナスするというのを、簡潔に書く記述方法があります。それがインクリメントやデクリメント演算子を使った方法です。

    i++;
    j--;

このようなプログラムを見たことがありませんか? この ++ はインクリメント演算子、この -- は、デクリメント演算子と言います。普通に記述するとi= i + 1となるところを、i++と表現しています。1ずつ増えるまたは減るというのが短く分かりやすくなりますね。この記述は、主にループ処理で使うことが多いです。例えば、こんなふうに。

public class Main {
    public static void main(String[] args) throws Exception {

        int i=0;
        int j=10;

        //iが10未満のとき、ループを続ける。
        while (i < 10) {
            System.out.println("i=" + i + "  j="+ j);

            //iは1づつ増やす。jは1づつ減らす
            i++;
            j--;
        }

    }
}

出力結果はこうなります。

i=0  j=10
i=1  j=9
i=2  j=8
i=3  j=7
i=4  j=6
i=5  j=5
i=6  j=4
i=7  j=3
i=8  j=2
i=9  j=1

代入演算子

代入演算子 説明
= 代入
+= 加算して代入
-= 減算して代入
*= 乗算して代入
/= 除算して代入
%= あまりを代入

代入演算子というのは、変数に数字や文字を代入する時に使う演算子です。数学でもいつも使われる=(イコール)は、プログラミングでも頻繁に出てくる演算子ですね。その他の代入演算子は、加算、減算などの記述をより簡潔に記述するためのものとなっています。サンプルを見てみましょう。

public class Main {
    public static void main(String[] args) throws Exception {

        //代入しています
        int a = 1;
        int b = 1;        
        int c = 5;

        //通常通り、計算して代入
        a = a + 4;
        System.out.println("a+4= >>>  " + a);

        //加算して代入  b=b+4と同じ意味です
        b += 4;
        System.out.println("b+=4 >>>  " + b);

        //あまりを代入  c=c%2と同じ意味です
        c %= 2;
        System.out.println("c%=2 >>>  " + c);

    }
}

複雑な式を代入演算子を使ってスマートに表現しているプログラムは非常にクールですが、プログラムの可読性を上げるためには、あまりまとめすぎないほうがいい場合もありますので注意してくださいね。

比較演算子

比較演算子 説明
> a > b aはbより大きい
< a < b aはbより小さい
>= a >= b aはb以上
<= a <= b aはb以下
== a == b aとbは等しい
!= a != b aとbは同じではない

比較演算子というのは数値や文字列の大小や同じかどうかというのを比較するために使う演算子です。

public class Main {
    public static void main(String[] args) throws Exception {

        int a = 10;
        int b = 0;
        int c = 10;


        // a > b
        System.out.println(a>b);

        // a < b
        System.out.println(a<b);

        // a <= c
        System.out.println(a<=c);

        // a >= c
        System.out.println(a>=c);

        // a == c
        if ( a == c ) {
            System.out.println("aとcは同じです");
        }

        if ( a != b ) {
            System.out.println("aとbは同じではありません");
        }
    }
}

こちらが出力結果です。

true
false
true
true
aとcは同じです
aとbは同じではありません

数値の比較の書き方は、数学と似ていますね。比較した結果は、boolean型として、true/falseで返ってきます。booleanの値はif文などの条件分岐に使うことができます。

注意点としては、文字列は単純な=(イコール)では正しく比較ができません。文字列を比較したい場合は、以下のようにequals()メソッドを使ってください。

public class Main {
    public static void main(String[] args) throws Exception {

        //st1とst3は同じ文章です
        String st1 = "おはようこんにちは";
        String st2 = "こんにちはこんばんは";
        String st3 = "おはようこんにちは";


        // st1とst2の比較
        if ( st1.equals(st2) ) {

        }else{
            System.out.println("st1とst2は同じではありません");
        }

        // st1とst3の比較
        if ( st1.equals(st3) ) {
            System.out.println("st1とst3は同じ文章です");
        }

    }
}

論理演算子

論理演算子 説明
&& a && b aかつbがtrueのとき true
|| a || b aまたはbがtrueのとき true
! !x xがtrueのとき false
^ x^y xとyのどちらか片方がtrueのとき true

条件の判断によく使う演算子として、論理演算子があります。結果はtrue/false で返されます。

public class Main {
    public static void main(String[] args) throws Exception {

    int a = 10;
    int b = 20;

    if( (a>0) && (b>0) ){
        System.out.println("aとbはどちらも0より大きい");
    }

    if( (a>10) || (b>10) ){
        System.out.println("aとbのどちらかが10より大きい");
    }

    if( !(a>10) ){
        System.out.println("aは10より大きくない");
    }

    if( (a>10) ^ (b>10) ){
        System.out.println("aとbのどちらか片方が10より大きい");
    }

    }
}

実行結果です。

aとbはどちらも0より大きい
aとbのどちらかが10より大きい
aは10より大きくない
aとbのどちらか片方が10より大きい

ビット演算子

web 系のプログラミングではあまり使うことはないかもしれませんが、ビット演算ができる演算子もあります。

ビット演算子 説明
& a&b abどちらにもセットされているビット
| a|b aまたはbにセットされているビット
<< a<< 10進数のaをbビット左シフト
>> a>>b 10進数のaをbビット右シフト
>>>> a>>>>b 10進数のaをbビットを右シフト、左は0で埋める
~ ~a 10進数のaのビットを反転
public class Main {
    public static void main(String[] args) throws Exception {

        int x = 16;
        int y = 16;
        int z = 128;
        System.out.println("16を左に4ビットシフト:" + (x << 4));
        System.out.println("16を右に4ビットシフト:" + (y >> 4));
        System.out.println("128を右に4ビットシフトして0埋め:" + (z >>> 4));
        System.out.println("128のビットを反転:" + (~z));
    }
}

出力結果です。

16を左に4ビットシフト:256
16を右に4ビットシフト:1
128を右に4ビットシフトして0埋め:8
128のビットを反転:-129

ビット演算子は、Javaでハードウェアを扱うときなどには重要になってきます。IoTデバイスを制御してみたい!という方は、身につけておきましょう。

Javaの演算子の注意点

基本型の代入と参照型の代入の違いを理解しておこう

変数に変数を代入すると代入された新しい変数には参照されていると言う事実が入るだけになっています。どういうことかというと

public class Main {
    public static void main(String[] args) throws Exception {

        int x = 1;
        int y = x;
        x = 2;

        System.out.println("x = " + x + " y = " + y);

    }
}

出力結果です。

x = 2 y = 1

上記の場合は、基本型の代入となりますが、下記の場合は直接代入していないyも値が変わってしまいます。

public class Main {
    public static void main(String[] args) throws Exception {

        int x[] = {1};
        int y[] = x;
        x[0] = 2;
        System.out.println("x[0] = " + x[0] + " y[0] = " + y[0]); 

    }
}

出力結果です。

x[0] = 2 y[0] = 2

これを理解していないとバグの元となってしまいますので注意しましょう。

演算子には優先順位がある

算数や数学の計算と同じように、 java の算術演算子代入演算子には優先順位があります。これを理解せずにプログラムを記述してしまうとこれまたバグの元となってしまいます。数学と同じようにかっこで閉じると、その中が優先して実行されますので、プログラムの読みやすさも考え、わかりやすく記述することを心がけましょう。

public class Main {
    public static void main(String[] args) throws Exception {

        int x;
        x = 10 + 2 * 3;
        System.out.println("10 + 2 * 3 = " + x);

        x = (10 + 2) * 3;
        System.out.println("(10 + 2) * 3 = " + x);


        x = 3 * 2 + 10;
        System.out.println("3 * 2 + 10 = " + x);

        x = 3 * (2 + 10);
        System.out.println("3 * (2 + 10) = " + x);

    }
}

下に記載したのが、出力結果です。式の順番を変えても、乗算が先に実行されています。かっこで閉じると、足し算が優先して実行されています。

10 + 2 * 3 = 16
(10 + 2) * 3 = 36
3 * 2 + 10 = 16
3 * (2 + 10) = 36

かっこで閉じない場合の基本の優先順位はこちらです。

優先順位演算子説明
1 ++, -- 後置インクリメント、後置デクリメント(i++など)
2 !,++,-- 否定、前置インクリメント・前置デクリメント
3 *,/,% 乗算、除算、あまり
4 +,- 加算、減算
5 <<,>> シフト
6 <,>,<=,>= 大小
7 ==,!= 同じ、同じでない
8 & ビット演算子
9 ^ ビット演算子
10 | ビット演算子
11 && 論理演算子
12 || 論理演算子

 

Java の学習をしたい人にオススメ記事

コードキャンプでは他にもたくさんのJava の学習情報を発信しています。是非他の記事も見てみてくださいね。

【初心者向け】Java学習にオススメの書籍7選
【超初心者向け】Javaとは何か?を簡単に解説
【初心者向け】Javaクラスの概要から使い方まで徹底解説

 

まとめ

image Java のプログラミング学習を進めていくために、演算子をきちんと理解して、知識の土台としていきましょう!分からなくなったら、是非またこのページに戻って確認してみてくださいね。

もし独力で勉強していくのがつらくなったら、プロのエンジニアと二人三脚でプログラミングスキルを磨いてみてはいかがでしょうか?

プログラミング家庭教師のCodeCampでは、ただいま一コマ無料体験授業のお申し込みを受付中です。なかなかプログラミングスクールに通う時間や場所的な余裕のない方に、オンライン受講できるCodecampはぴったりです。ビデオチャットのマンツーマン授業は、短期間で基礎からしっかりとしたプログラミング技術を身につけたい方に、オススメですよ。

のりぴよ
ライター
のりぴよ

関連記事