Javaプログラミング入門

3. 式と演算子

最終更新:

javatutorial

- view
管理者のみ編集可

式とは

コンピュータに計算をさせるために、値を使って指示を出す文のことを「(expression)」といいます。
式は「演算子」と「オペランド」から構成されています。
演算子とは、+や-、=などのように、計算の種類を指定する記号(シンボル)のことです。
オペランドとは、演算子によって計算されるのことを指します。
例えば「7 + 3」の場合、「+」は演算子、「7」と「3」はオペランドになります。

Javaには様々な演算子がありますが、今回は単純な四則演算を行うための算術演算子のみを使ってみましょう。
記号 読み方 意味 記載例
+ 加算演算子 足し算を行います 10 + 3
- 減算演算子 引き算を行います 10 - 3
* 乗算演算子 掛け算を行います 10 * 3
/ 除算演算子 割算を行います 10 / 3
% 剰余演算子 割り算の余りを求めます 10 % 3
この演算結果はHello World!という文字を出力する際に使用した命令で見ることができます。
各、演算子を使用した演算結果を実際に見てみましょう。

サンプル:FourArithmetic.java
  1. public class FourArithmetic {
  2. public static void main(String[] args) {
  3. System.out.println(10 + 3);
  4. System.out.println(10 - 3);
  5. System.out.println(10 * 3);
  6. System.out.println(10 / 3);
  7. System.out.println(10 % 3);
  8. }
  9. }
  10.  
実行結果
13
7
30
3
1

剰余演算子

剰余演算子は上の表で記載したように、割算の余りを求める際に使用します。
10 % 3の場合、10÷3の余りが求められます。10÷3は3あまり1となりますので、が出力されます。

文字列連結演算子

文字列連結演算子は、2つの文字列をつなげるために使います。
使う演算子記号は足し算と同じ【】を使用します。
サンプル:StringConnection.java
  1. public class StringConnection {
  2. public static void main(String[] args) {
  3. // つなげた文字列を出力
  4. System.out.println("He" + "llo!!");
  5. }
  6. }
  7.  
実行結果
Hello!!

数値と文字列の足し算

例えば、Javaで次のようなコードを書いたとします。
サンプル:NumStrConnection.java
  1. public class NumStrConnection {
  2. public static void main(String[] args) {
  3. System.out.println(10 + "個のリンゴ");
  4. }
  5. }
  6.  
実行結果
10個のリンゴ
文字列同士を足したときは文字列の連結をしましたが、今回は数値と文字列を足しています。
この書き方はコンパイルエラーになるわけではなく次の規則に従って文字列の連結を行っていきます。
どちらか一方のオペランドが文字列でない場合、文字列ではないオペランドを自動的に文字列に変換してから結合します。


数値と文字列の足し算での注意事項

Javaでは、【+】を使うと数値の計算だけでなく、文字列の連結もできます
しかし、数値と文字列を一緒に使う場合、思わぬ結果になることがあるので注意が必要です。
次のようにプログラムを記載した際にどのようなことが起こるか見てみましょう。
サンプル:StrNumConnection.java
  1. public class StrNumConnection {
  2. public static void main(String[] args) {
  3. System.out.println("10 + 3 = " + 10 + 3);
  4. }
  5. }
  6.  
実行結果
10 + 3 = 103
Javaでは、算数や数学と同じように演算子の優先順位が決まっています。
例えば、数学では足し算(+)より掛け算(*)が優先的に計算されるように、Javaにも結合規則というものがあり、どの順番で計算が進むかが決まっています。
今回の"10 + 3 =" + 10 + 3のように、+が連続する場合、+の優先順位はすべて同じなので、左から順番に処理されます。(これを左結合と呼びます)

処理の流れは次のようになります。
文字列"10 + 3 ="と数値10の+があるため、数値10が文字列に変換されて連結されます。


文字列"10 + 3 =10"と数値3の+があるため、同じように3が文字列に変換されて連結されます。
結果 → "10 + 3 =103"

このようにして、最終的に"10 + 3 = 103"という文字列が表示されるのです。

今回は、優先度が同じ演算子(+)の動きを見てきましたが、
足し算(+)と掛け算(*)が混在する場合は、掛け算が優先されます。
サンプル:StrConUseMultiplied.java
  1. public class StrConUseMultiplied {
  2. public static void main(String[] args) {
  3. System.out.println("10 * 3 = " + 10 * 3);
  4. }
  5. }
  6.  
実行結果
10 * 3 = 30
処理の流れは次のようになります。

掛け算(*)は足し算(+)より優先順位が高いため、最初に 10 * 3 の計算が行われます。

10 * 3 の結果は 30になります。

【+】は数値と文字列が混ざると数値を自動で文字列に変換し、連結させます。
結果、"10 + 3 = 30" という文字列が完成し、画面に表示されます。

優先度を上げるためには

先ほどの"10 + 3 = " + 10 + 3のような処理をするときに文字列連結ではなく
足し算を優先させたい場合は、()を使って計算順序を明示します。
サンプル:StrConUseBrackets.java
  1. public class StrConUseBrackets {
  2. public static void main(String[] args) {
  3. // ()を使って優先順位を上げる
  4. System.out.println("10 + 3 = " + (10 + 3));
  5. }
  6. }
  7.  
実行結果
10 + 3 = 13

コラム

以下の表に種類の一覧をまとめておきます。
Javaで使用することが可能な演算子の種類
算術演算子 数値に対して計算を行います
代入演算子 変数に値を代入するために使用されます
比較演算子 値を比較するために使用されます
論理演算子 条件を組み合わせたり判定するために使用されます
ビット演算子 整数型のビットを操作します
インクリメント・デクリメント演算子 変数の値を1だけ増減させるために使用されます
三項演算子 条件に応じて異なる値を返す簡潔な条件分岐です
文字列連結演算子 複数の文字列をつなげるための演算子です

以下の表にJavaで使用される演算子の優先順位の一覧をまとめておきます。
上から優先順位がだんだん下に下がっていきます。
演算子の優先順位
記号 意味 結合規則
++ 後置インクリメント
-- 後置デクリメント
! 論理否定
~ 1の補数(反転)
+ プラス
- マイナス
++ 前置インクリメント
-- 前置デクリメント
() キャスト
* 乗算
/ 除算
% 剰余
+ 加算(文字列連結)
- 減算
<< 左シフト
>> 右シフト
>>> 符号なし右シフト
> より大きい
>= 以上
< 未満
<= 以下
== 等価
!= 非等価
& ビット論理積
^ ビット排他的論理和
| ビット論理和
&& 論理積
|| 論理和
?: 条件
= 代入
+=,-=など 複合代入演算


ウィキ募集バナー