Java入門|演算子の種類

演算子を知ると、Javaのコードは「書ける」だけでなく「読み解ける」ようになる。

Javaでプログラムを書いていると、数を足したり引いたりするだけでなく、値を比べたり、条件によって処理を分けたり、文字列をつなげたりする場面がたくさん出てきます。そうした処理を支えているのが、演算子です。

これまでに見てきた + や - も演算子の一種ですが、Javaにはそれ以外にも多くの演算子が用意されています。演算子には、それぞれ決まった役割があります。たとえば、数値を計算するためのもの、大小を比べるためのもの、真か偽かを判定するためのものなど、目的に応じて使い分けます。

演算子の種類を知ることは、単に記号を覚えることではありません。どの演算子がどんな場面で使われ、どんな値を返すのかを理解することで、コードの意味がぐっと読みやすくなります。また、今後学ぶ条件分岐や繰り返し処理でも、演算子は何度も登場します。つまり、演算子の理解はJavaの基礎力を支える大切な土台なのです。

ここでは、まずJavaにどのような演算子があるのかを整理し、そのあとで実際に四則演算や剰余演算子、文字列連結演算子の動きを、サンプルプログラムを通して丁寧に見ていきましょう。

いろいろな演算子

Javaには、+ 演算子以外にもたくさんの演算子があります。まずは代表的なものを一覧で見てみましょう。

記号名前
+加算、文字列連結
-減算
*乗算
/除算
%剰余
++インクリメント
--デクリメント
>より大きい
>=以上
<未満
<=以下
==等価
!=非等価
!論理否定
&&論理積
||論理和
&ビット論理積
|ビット論理和
^ビット排他的論理和
~補数
<<左シフト
>>右シフト
>>>符号なし右シフト
? :条件演算子
instanceof型比較
newオブジェクト生成

この表を見ると、Javaの演算子は「計算」だけのためにあるわけではないことがわかります。四則演算に使うものもあれば、比較や条件判定に使うものもありますし、オブジェクト生成に関わるものまであります。

最初のうちは全部を一度に覚えなくても大丈夫です。まずは、よく使う基本的な演算子から意味をつかむことが大切です。

演算子にはオペランドを1つとるものと2つとるものがある

演算子には、いくつのオペランドを必要とするかという違いがあります。

たとえば、

10 - 2

の - は、左側の 10 と右側の 2 という 2つのオペランドを使っています。このような演算子は、2項演算子として扱われます。

一方で、

-10

の - は、1つの値 10 に対して「負の数にする」という働きをしています。こちらは 1つのオペランドだけを使う演算子です。このような演算子は、単項演算子と呼ばれます。

表にすると、違いがわかりやすいです。

オペランドの数意味
10 - 22つ10 から 2 を引く
-101つ10 を負の数にする
++num1つnum の値を 1 増やす
!flag1つtrue と false を反転する

このように、同じ記号でも使い方によって役割が変わることがあります。特に + と - は、2つの値を使う場合もあれば、1つの値に対して使う場合もあります。

基本の演算子を使ってみよう

では、実際に基本的な演算子を使ったプログラムを見てみましょう。ここでは、元の例とは別のシンプルなプログラムに置き換えて説明します。表示メッセージも別の日本語にし、コメント文も日本語にしています。

ファイル名:Sample4.java

class Sample4
{
    public static void main(String[] args)
    {
        int price = 18;
        int count = 4;

        System.out.println("priceとcountを使って計算します。");

        // たし算の結果を表示する
        System.out.println("price+countは " + (price + count) + " です。");

        // ひき算の結果を表示する
        System.out.println("price-countは " + (price - count) + " です。");

        // かけ算の結果を表示する
        System.out.println("price*countは " + (price * count) + " です。");

        // わり算の結果を表示する
        System.out.println("price/countは " + (price / count) + " です。");

        // あまりの結果を表示する
        System.out.println("price%countは " + (price % count) + " です。");
    }
}

実行結果

このプログラムを実行すると、次のような結果になります。

priceとcountを使って計算します。
price+countは 22 です。
price-countは 14 です。
price*countは 72 です。
price/countは 4 です。
price%countは 2 です。

この結果から、加算、減算、乗算、除算、剰余がどのように働くかが確認できます。

四則演算の演算子を整理しよう

まずは、基本となる四則演算と剰余を表で整理しておきましょう。

演算子はたらき結果
+足し算18 + 422
-引き算18 - 414
*掛け算18 * 472
/割り算18 / 44
%あまり18 % 42

ここで気をつけたいのは、/ 演算子です。今回の price と count はどちらも int 型なので、整数どうしの割り算になります。整数どうしの割り算では、小数部分は切り捨てられます。

たとえば、

18 / 4

の正確な計算結果は 4.5 ですが、int 型どうしの計算では 4 になります。

この点はとても大切なので、最初のうちにしっかり意識しておきたいところです。

% 演算子は「あまり」を求める演算子

最後に出てきた % 演算子は、少しなじみが薄いかもしれません。でも、Javaではとても便利で、よく使われる演算子です。

この演算子は、割り算をしたときの あまり を求めます。

たとえば、

18 % 4

を考えると、

  • 18 ÷ 4 = 4 あまり 2

となるので、式の値は 2 です。

つまり、% 演算子は「商」ではなく、あまりの部分を返します。

表で見ると、さらにわかりやすいです。

割り算の意味結果
10 % 310 ÷ 3 = 3 あまり 11
15 % 415 ÷ 4 = 3 あまり 33
20 % 520 ÷ 5 = 4 あまり 00
18 % 418 ÷ 4 = 4 あまり 22

% 演算子はどんなときに役立つのか

% 演算子は、実際のプログラムでもとてもよく使います。特に、グループ分け周期的な処理を行うときに便利です。

たとえば、ある数を 5 で割ったあまりを考えると、結果は必ず 0、1、2、3、4 のどれかになります。つまり、5つのグループに分類できるということです。

数値5で割ったあまり
00
11
22
33
44
50
61
72

この性質を使うと、

  • 曜日を順番に切り替える
  • 交互に色を変える
  • 数字をグループごとに振り分ける

といった処理がしやすくなります。

また、偶数と奇数の判定にもよく使います。整数を 2 で割ったあまりが 0 なら偶数、1 なら奇数です。

この図では、18 ÷ 4 の計算で「あまり 2」が出ることを示し、その下で 18 % 4 の結果が 2 になることを表しています。つまり、% 演算子は割り算全体を見るのではなく、その中のあまりだけを取り出す演算子だと理解できます。

剰余は最初は少し特殊に見えるかもしれませんが、慣れるととても便利です。特に、何かを一定の数で区切って考えたいときには、とても役立ちます。

0 で割ることはできない

ここでひとつ注意点があります。/ 演算子と % 演算子では、整数を 0 で割ることはできません。

たとえば、

10 / 0

10 % 0

のような式を書くと、正しく計算できません。

これは数学でも同じように、0 で割ることは特別な扱いになるためです。Javaでもこのような計算はエラーの原因になります。ですので、割り算やあまりを求めるときは、割る側の値が 0 でないかに注意する必要があります。

+ 演算子は文字列連結にも使われる

  • 演算子は足し算だけに使うのではなく、文字列をつなげるはたらきも持っています。これを文字列連結演算子といいます。

たとえば、サンプルの中にあった次のコードを見てみましょう。

System.out.println("price+countは " + (price + count) + " です。");

この中には、+ がいくつか出てきますが、すべて同じ意味ではありません。

  • (price + count) の中の + は数値の足し算
  • "price+countは " + ... + " です。" の外側の + は文字列の連結

という違いがあります。

つまり、+ 演算子は 相手が数値か文字列かによって役割が変わるのです。

文字列連結の動きを整理しよう

例を見ながら整理してみます。

書き方意味結果
3 + 4数値の足し算7
"3" + "4"文字列の連結34
"答えは " + 7文字列と数値の連結答えは 7
"合計は " + (3 + 4)計算してから連結合計は 7
"合計は " + 3 + 4左から文字列として連結合計は 34

最後の2つは特に大切です。

"合計は " + (3 + 4)

では、丸かっこの中が先に計算されるので 7 になります。

一方で、

"合計は " + 3 + 4

では、左から順に文字列としてつながるので、結果は 合計は 34 になります。

ここはとても間違えやすいので、数値を計算したい部分は丸かっこで囲むという習慣をつけておくと安心です。

この図では、左側で丸かっこがある場合は先に 3 + 4 が計算され、その結果の 7 が文字列とつながることを示しています。右側では、丸かっこがないため、左から順に文字列として結びつき、34 になることを表しています。

この違いを見分けられるようになると、println の中の式をかなり正確に読み取れるようになります。

単項演算子にも少し触れておこう

表に出てきた演算子の中には、単項演算子もあります。たとえば、

演算子意味
+正の値を表す+10
-負の値を表す-10
!true と false を反転する!flag
++値を1増やす++num
--値を1減らす--num
~ビットを反転する~num

この中でも、今後よく使うのは ++ や --、! あたりです。今回の中心は四則演算や文字列連結ですが、Javaには「1つの値に対して作用する演算子」もあると知っておくと、演算子の全体像がつかみやすくなります。

今回の内容で押さえておきたいこと

演算子の種類を学ぶときは、全部を丸暗記するよりも、まずは次のような基本をしっかり理解することが大切です。

ポイント内容
演算子にはいろいろな種類がある計算、比較、論理、シフトなど用途が分かれている
オペランドの数が違うものがある単項演算子は1つ、通常の計算演算子は2つのオペランドをとる
% はあまりを求めるグループ分けや偶数奇数判定でよく使う
+ は文字列連結にも使う相手に文字列があると連結として働く
丸かっこが大切計算の意図をはっきり示せる

このあたりがしっかりつかめてくると、Javaの式を読む力がかなり安定してきます。演算子は記号の集まりに見えますが、ひとつひとつに役割があります。その役割を理解しながら使っていくことで、コードの意味が見えやすくなり、自分で書くときにも自信を持てるようになります。