はじめに
数学で計算式を書く時、+、-、×、÷という記号を使いますが、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
を返す - ダブル( &&、|| )の演算子は無駄な検査を省略する機能がある(
短絡演算子
)
優先順位と結合規則
優先順位
とは、ひとつの式の中に演算子が混在するとき、どの演算子を先に適用するのかという規則結合規則
とは、ひとつの式の中に同じ優先順位の演算子が複数あるとき、左から順に適用していくか、右から順に適用するのかという規則