演算子

演算子とオペランド

計算をするときに使われる+や-、代入するときの=などの記号を演算子(operator)といいます。Javaには多くの演算子が用意されています。ここでは、その演算子の使い方を学んでいきましょう。
リテラル・変数などや演算子を組み合わせたものを式(expression)といいます。具体的にいえば、1+2は式です。この場合+が演算子なのですが、それに対して、1や2のように演算の対象となる部分をオペランド(operand)と呼びます。Javaインタプリタは式を評価して、そのを計算します。1+2という式を評価したときの値は3になります。

算術演算子

よく知られている四則演算に関する演算子のことを算術演算子といいます。まずは表にまとめてみましょう。

表 5-1 : Javaの算術演算子
演算子 名前 使い方 意味
+ 加算(文字列連結) a + b aにbを足す
- 減算 a - b aからbを引く
* 乗算 a * b aにbをかける
/ 除算 a / b aをbで割る
% 剰余 a % b aをbで割った余りを得る

かけ算と割り算の演算子は、数学のものとは記号が違っています。また、余りを求める演算子まで用意されています。しかし、「aをb乗する」のような如何にもありそうな演算子がJavaにはありません。

演算子の中にはオペランドを2つとるものばかりではなく、1つだけとるものもあります。例えば、

-a

のようにマイナスの符号を表すものがそうです。このようにオペランドを1つだけとる演算子を単項演算子と呼びます。

もちろん、式の中では()も使うことができて、()の中は一番最初に評価されます。

ともあれ、これらの演算子を早速試してみましょう。

OperatorSample01.java
class OperatorSample01 {
    public static void main(String[] args){
        int a = 8;
        
        System.out.println("a + 2 = " + ( a + 2 ) );
        System.out.println("a - 2 = " + ( a - 2 ) );
        System.out.println("a * 2 = " + ( a * 2 ) );
        System.out.println("a / 2 = " + ( a / 2 ) );
        System.out.println("a % 2 = " + ( a % 2 ) );
    }
}

結果を予想してから実行してください。

OperatorSample01の実行結果
a + 2 = 10
a - 2 = 6
a * 2 = 16
a / 2 = 4
a % 2 = 0

どうでしょう。予想通りの結果が得られましたか。

では、この結果について説明しましょう。まず、

        int a = 8;

によって変数aに8という値が代入されます。次に、

        System.out.println("a + 2 = " + ( a + 2 ) );

の中の

        ( a + 2 )

という式が評価され、その値は10となります。従って、次は、

        "a + 2 = " + 10

という式が評価されて、

        "a + 2 = 10"

という文字列になり、それがそのまま表示されたわけです。引き算以降についても同様です。

        ( a + b )

などの()をはずすとどうなるのかは、後ほど実験します。

Javaインタプリタは式を評価して、値を求める。

代入演算子

既に「変数への値の代入」のところで述べた通り、=も演算子の一つで、代入演算子と呼ばれています。次のコードを見てください。

OperatorSample02.java
class OperatorSample02 {
    public static void main(String[] args){
        int a1, a2, a3, a4;
        
        a1 = 1;
        a2 = 1;
        a3 = a1 + a2;
        a4 = a2 + a3;
        
        System.out.println("a1 = " + a1 );
        System.out.println("a2 = " + a2 );
        System.out.println("a3 = " + a3 );
        System.out.println("a4 = " + a4 );
    }
}

さて、

        a3 = a1 + a2;
        a4 = a2 + a3;

の部分に注目してください。

「変数への値の代入」のところでは、変数にはリテラルや他の変数を代入できることを説明しましたが、このように式の値を代入することもできるのです。

それでは、結果を予想してから実行してみましょう。

OperatorSample02の実行結果
a1 = 1
a2 = 1
a3 = 2
a4 = 3

OperatorSample02は、直前の2項の和が次の項となる数列、即ちフィボナッチ数列の第4項までを求めるプログラムだったのです。