はじめに
数学で計算式を書く時、+、-、×、÷という記号を使いますが、Java言語でも計算式を書くために同じような記号を使いますが、Java言語ではもっとたくさんの計算するための記号があります。計算で使用する記号のことを演算子といいます。この章では、演算子の種類や使い方について学習します。
目次
- 基本的な演算子
- 単項演算子
- 文字列の連結
- 算術演算子
- 代入演算子
- 複合代入演算子
- 関係演算子
- 論理演算子
- 優先順位と結合規則
- 章のまとめ
目標
演算子の種類と性質を理解し、各演算子を使用した処理ができるようにすること。
基本的な演算子
プログラムでは、変数に値を代入するだけではなく、変数や定数に対して加算や比較などの演算を行うことがあります。計算式の中では + 記号や > 記号を使用して加算や比較という個々の演算をします。
計算や比較をするための記号のことを演算子と呼びます。
[Java言語の演算子一覧]
| 主な種類 | 演算子 | 説明 |
|---|---|---|
| 単項演算子 | ++、– | ひとつの値に関して処理をおこなう |
| 算術演算子 | +、-、*、/、% | 四則演算をおこなう |
| 関係演算子 | ==、!=、>、<、>=、<= | 2つの値に対して評価をおこなう |
| 代入演算子 | = | 左辺の変数へデータ(変数やリテラルや式の結果)を代入する演算子 |
| 複合代入演算子 | +=、-=、*=、/=、%= | 左辺の変数へデータ(変数やリテラルや式の結果)を再代入する演算子 |
まずは、演算子の使い方を学習していきましょう。
単項演算子
単項演算子とは、ひとつの値に関して処理をおこなう演算子です。
例題(単項演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec01 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec01.java
実行例:> java chapter3.EnzansiExec01
1
-1
++をインクリメント、--をデクリメントといいます。
インクリメントやデクリメントはすでに何かの値が入っている変数に対して、その値を1だけ増やしたり減らすという操作を行います。
また、インクリメントやデクリメントは前に付けたり(前置)、後ろにつける(後置)ことで働き方が違ってきます。
| 位置 | 説明 |
|---|---|
| 前置 | 計算に使う直前に増減する |
| 後置 | 計算に使った直後に増減する |
例題(単項演算子(前置))
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec02 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec02.java
実行例:> java chapter3.EnzansiExec02
11
16
式の中で前置を使った場合、計算に使う直前に増減します。
例題(単項演算子(後置))
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec03 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec03.java
実行例:> java chapter3.EnzansiExec03
11
15
式の中で後置を使った場合、計算に使った直後に増減します。
文字列の連結

上記のように2つ以上の文字列を一つに連結したいことがあります。そんな時は文字列演算子の+を使います。
例題(文字列と文字列の連結)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec04 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec04.java
実行例:> java chapter3.EnzansiExec04
おはよう佐藤さん
例題(文字列と文字列以外の連結)
文字列と文字列以外の型の変数を+した場合には文字列として扱われます。
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec05 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec05.java
実行例:> java chapter3.EnzansiExec05
合計金額は1000円(税抜)です。
合計金額は1100円(税込)です。
文字列と文字列以外を+すると結合として処理されます。
尚、カッコ( ) で囲むと一番先に処理されます。
算術演算子
算術演算子とは加減乗算(+、-、×、÷)のことです。Java言語ではこのほかに割った余りを求める剰余演算(モジュロ演算)があります。
例題(算術演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec06 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec06.java
実行例:> java chapter3.EnzansiExec06
a1 = 50
a2 = -10
a3 = 600
a4 = 0
a5 = 20
代入演算子
=は代入演算子です。何らかの値を変数に代入する演算子です。
したがって=の左側は必ず変数でなければなりません。=は、以下のような働きの演算子です。
変数 = 式 ; |
上記は、右辺の式の値を左辺の変数に代入するという意味です。
左辺と右辺が等しいという意味ではないので注意して下さい。
例題(代入演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec07 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec07.java
実行例:> java chapter3.EnzansiExec07
a = 5
b = 5
c = 5
=で変数を連結すると、すべての変数を同じ値にすることができます。
a = b = c = 5; |
上記、一行の命令を分割すると以下になります。
(内部では①、②、③の順番で実行しています。)
c = 5; ← ① |
複合代入演算子
複合代入演算子は、再代入して、短絡して書くための演算子です。
| 演算記号 | 使用例 | 意味 | 算術演算子での記述 |
|---|---|---|---|
| += | a += b | aにbを加えた値をaに代入する | a = a + b |
| -= | a -= b | aからbを引いた値をaに代入する | a = a - b |
| *= | a *= b | aにbを乗じた値をaに代入する | a = a * b |
| /= | a /= b | aをbで割った値をaに代入する | a = a / b |
| %= | a %= b | aをbで割ったあまりをaに代入する | a = a % b |
例題(複合代入演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec08 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec08.java
実行例:> java chapter3.EnzansiExec08
5
2
12
3
1
例題(複合代入演算子(キャスト不要))
複合演算子は本来、キャストしなければならないケースでもキャストしなくても良いという性質があります。
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec09 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec09.java
実行例:> java chapter3.EnzansiExec09
15
関係演算子
関係演算子を使って作る式を関係式と言います。関係演算子の種類は以下です。
| 関係演算子 | 使用例 | 意味 |
|---|---|---|
| > | a > b | aはbより大きい |
| < | a < b | aはbより小さい |
| >= | a >= b | aはb以上 |
| <= | a <= b | aはb以下 |
| == | a == b | aとbは等しい |
| != | a != b | aとbは等しくない |
関係演算子はリテラルや変数や式を比較するために使います。
関係演算子を使用した式を関係式といいます。
[関係式の例]a > 0 //aは正の数
a >= 10 //aは10以上
a == 20 //aは20と等しい
a != 0 //aは0ではない
a > b+5 //aはb+5よりも大きい
a > b //aはbよりも大きい
a+b > 5 //a+bは5以上
a+b > c //a+bはc以上
a == b*2 //aはbの2倍と等しい
a%3 == 0 //aはbの3倍である
a+1 != 2 //a+1は2ではない
a+1 != b-2 //a+1はb-2ではない
関係式の値はtrueかfalseのどちらかになります。

例題(関係演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec10 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec10.java
実行例:> java chapter3.EnzansiExec10 100
true
> java chapter3.EnzansiExec10 20
false
関係式を表示するにはprintln()メソッドで表示するのが一般的です。println()メソッドの中に式を書くと、式の計算をした結果の値を表示してくれます。
上記の場合、コマンドライン引数で指定した値によってtrueかfalseか違ってきます。
(50を超える値を指定した場合は、true。50以下の場合はfalseになります。)
文字の比較
char型では以下の値は全て「a」を表します。
char c; |
つまり、char型は文字コード番号(整数)を保持する型です。
したがって、整数なので関係演算子を利用して大小を比較することができます。
例題(文字の比較)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec11 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec11.java
true
実行例:> java chapter3.EnzansiExec11
true
※文字型(char型)は、数値であればどんな方とでも比較は可能です。
論理演算子
論理演算子は関係式の組み合わせて、複雑な条件を作成するために使います。次のような演算子があります。
| 論理演算子 | 呼び方 | 意味 |
|---|---|---|
| && 、& | 論理積 | 両方の関係式がtrue(正しい)ときのみ、trueとする |
| || 、| | 論理和 | どちらか1つの関係式でもtrueならtrueとする |
| ! | 否定 | trueならfalse、falseならtrueに反転する |
| ^ | 排他的論理和 | 片方がtrueでもう片方がfalseのときtrueを返す |
例題(論理演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec11 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec11.java
実行例:> java chapter3.EnzansiExec11 5 0
a > 0 && a < 10 = true
a <= 0 || a >= 10 = false
!(a > 0 && a < 10 ) = false
( a == 0 ) ^ ( b == 0 ) = true
短絡演算子
通常のプログラミングで、& や | を使うことはありません。常に && や || を使います。それはダブルの演算子( && や || )の方が効率が良いからです。

ダブルの演算子は無駄な検査を省略する機能があるので、短絡演算子と呼びます。
例題(&&演算子の短絡評価)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec12 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec12.java
実行例:> java chapter3.EnzansiExec12
false
a=2 b=1
例題(||演算子の短絡評価)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec13 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec13.java
実行例:> java chapter3.EnzansiExec13
true
a=2 b=1
条件演算子
条件演算子は、条件がtrueかfalseかで違う値になる式を作ります。

条件部に論理式と?を書き、その後trueの時の値とfalseの時の値をコロン(:)で区切って並べます。
3つの項があるので3項演算子とも呼びます。
例題(条件演算子)
以下をコーディングし、実行結果を確認してみましょう。
| 項目 | 名前 |
|---|---|
| プロジェクト | alj_study |
| パッケージ | chapter3 |
| クラス | EnzansiExec14 |
package chapter3; |
コンパイル例:> javac chapter3¥EnzansiExec14.java
実行例:> java chapter3.EnzansiExec14 2
n = 10
優先順位と結合規則
演算子には優先順位と結合規則があります。
以下の表は、上にある演算子ほど優先順位が高くなります。
| 名称 | 演算子 | 結合規則 |
|---|---|---|
| 前置インクリメント・デクリメント | ++、– | ←右 |
| 単項プラス・マイナス | +、- | ←右 |
| キャスト(型変換) | (データ型) | ←右 |
| 乗算、除算、剰余算 | *、/、% | 左→ |
| 加算、減算 | +、- | 左→ |
| 文字列結合 | + | 左→ |
| 代入演算子 | = | ←右 |
| 複合代入演算子 | +=、-=、*=、/=、%= | ←右 |
| 後置インクリメント・デクリメント | ++、– | 左→ |
優先順位とは、ひとつの式の中に演算子が混在するとき、どの演算子を先に適用するのかという規則です。
例えば以下のような演算で、+よりも×を優先して、10 × 30 の部分を先に計算するような規則です。
50 + 10 × 30 |
結合規則とは、ひとつの式の中に同じ優先順位の演算子が複数あるとき、左から順に適用していくか、右から順に適用するのかという規則です。
value = 20 + 30 + 4; |
また()を使うと優先順位や結合規則を強制的に変更することができます。
( 50 + 10 ) × 30 |
章のまとめ
以下の要点を理解できたら次の章へ進んでください。
基本的な演算子
| 主な種類 | 演算子 | 説明 |
|---|---|---|
| 単項演算子 | ++、– | ひとつの値に関して処理をおこなう |
| 算術演算子 | +、-、*、/、% | 四則演算をおこなう |
| 関係演算子 | ==、!=、>、<、>=、<= | 2つの値に対して評価をおこなう |
| 代入演算子 | = | 左辺の変数へデータ(変数やリテラルや式の結果)を代入する演算子 |
| 複合代入演算子 | +=、-=、*=、/=、%= | 左辺の変数へデータ(変数やリテラルや式の結果)を再代入する演算子 |
単項演算子
- 前置:++aはaを計算に使う
前に1増やす。–aはaを計算に使う前に1減らす - 後置:a++はaを計算に使った
直後に1増やす。–aはaを計算に使った直後に1減らす - 単項演算子は、
double型にも使用できる
文字列の連結
+は文字列と文字列を結合する連結演算子としても機能する+は文字列と文字列以外の型の変数も連結できる- a+bではa、b
共に数値型なら+は加算の演算子として働く - a+bではaかbの
どちらかがString型(文字列)なら連結演算子として働く
算術演算子
- 単項 + 、単項 - は
変数にも使える - 剰余は、割った
余りを求める - 剰余は、
double型にも使える
代入演算子
=は右辺の値を左辺の変数に代入する演算子である- a=b=c; のように
多重に使える
複合代入演算子
- 複合代入演算子は、
再代入を行うための演算子である。例) a+=1; b%=5; - 再代入される変数は、あらかじめ
初期化しておく必要がある。例) a=1; a+=1; - 複合代入演算子は、
型変換のエラーが起こらない。例) int n=1; n+=1.234; //OK - 複合代入演算子は a+=b+=c; のように
多重に使える
関係演算子
- 関係演算子を使って作る式を
関係式と呼ぶ - 関係演算子はリテラルや変数や式を
比較するために使う - 関係式の値は
trueかfalseのどちらかである - 変数の値によってtrueになるかfalseになるか決まる
- 文字型(char型)はユニコード番号(
整数)を保持する型で、関係演算子を使って比較することが可能 - 文字型(char型)は、
数値であればどんな方とでも比較は可能です。
論理演算子
- && 、& は
両方の関係式がtrue(正しい)ときのみ、trueとする - || 、| は
どちらか1つの関係式でもtrueならtrueとする - !は
trueならfalse、falseならtrueに反転する - ^は
片方がtrueでもう片方がfalseのときtrueを返す - ダブル( &&、|| )の演算子は無駄な検査を省略する機能がある(
短絡演算子)
優先順位と結合規則
優先順位とは、ひとつの式の中に演算子が混在するとき、どの演算子を先に適用するのかという規則結合規則とは、ひとつの式の中に同じ優先順位の演算子が複数あるとき、左から順に適用していくか、右から順に適用するのかという規則