Okapi Project

演算子

バージョン
2004 年 01 月 18 日 Ver.1.0
作成者
T.Hirata ( Xware )

要約

ここでは Java の基礎知識として Java で使用できる演算子についての解説をします。

目次


1. 算術演算子

Java の算術に使う演算子です。

算術演算子は 2 つのオペランドの間に記述し、拡張型変換のルールに基づき、型変換されます。

 

算術演算子
優先 演算子 意味
1 ++ インクリメント(1 加算) ++i または i++
1 -- デクリメント(1 減算) --1 または 1--
1 + + 符号(単項 +) +i
1 + - 符号(単項 +) -i
2 * 掛け算(乗算) 5 * 3
2 / 割り算(除算) 5 / 3
2 % 割り算の余り(剰余算) 5 % 3
3 + 足し算(加算) 5 + 3
3 - 引き算(減算) 5 - 3
3 = 演算してから代入 i += 1

 

1.1. インクリメントとデクリメント

インクリメントとデクリメントは、変数に対して 1 を加算したり、1 を減算したりします。

ただし、他の算術演算子と併用する場合、変数の前につける場合と、後ろに付ける場合で結果が異なります。

 

演算子を前につけた場合

int i = 10;
int x = ++i;
System.out.Println(“x=” + x);
System.out.Println(“i=” + i);

プログラムの実行結果は以下のようになります。

x=11
i=11

 

演算子を後につけた場合

int i = 10;
int x = i++;
System.out.Println(“x=” + x);
System.out.Println(“i=” + i);

プログラムの実行結果は以下のようになります。

x=10   // インクリメントされる前に代入
i=11      // 代入ごにインクリメントされる

 

1.2. 演算子つき代入

「=」の前に算術演算子をつけることで、代入と同時に演算ができます。

 

演算子つきの代入
書き方 意味
i += 3 i = i + 3
i -= 3 i = i - 3
i *= 3 i = i * 3
i /= 3 i = i / 3
i %= 3 i = i % 3

 

上記以外にも論理演算子( & , | , ^ など)やビット演算子( >> , >>> など)と組み合わせて使用する方法もあります。

 

2.比較演算子

数値などの比較に使用する演算子です。

比較算子は 2 つのオペランドの間に記述し、オペランドの型が異なる場合は拡張型変換のルールに基づき、一方のオペランドが型変換されます。

また、比較結果は必ず boolean 型になります。

 

比較演算子
優先 演算子 意味 オペランドの型
5 < 未満 x < y 数値
5 > 超える x > y 数値
5 <= 以下 x <= y 数値
5 >= 以上 x >= y 数値
6 == 等しい x == y 任意
6 != 等しくない x != y 任意

 

2.1. オブジェクトの比較

オブジェクトの比較ができる比較演算子は「= =」と「!=」です。

オブジェクトの比較は参照値が一致しているかを比較します。

オブジェクトに格納されている値を比較するには、epuals() メソッドを利用します。

 

3. 論理演算子

論理式を評価する演算子です。

オペランドの型は boolean で、評価結果は必ず boolean 型になります。


論理演算子
優先 演算子 意味 オペランドの型
1 ! NOT !A boolean
7 & AND A & B boolean(ビット演算では整数)
8 ^ XOR A ^ B boolean(ビット演算では整数)
9 | OR A | B boolean(ビット演算では整数)
10 && AND(条件節) A && B boolean
11 || OR(条件節) A || B boolean

 

3.1. 論理式の評価

「&」 , 「 | 」を使用した論理式は、左右のオペランドが必ず評価されます。

それに対して、「&&」 , 「 || 」 は左側のオペランドの評価結果で論理式の条件を満たすことが判断できる場合、右側のオペランドは評価されません。

例えば、「 false AND true 」は左側のオペランドを見るだけで、右側のオペランドに関係なくこの論理式の結果は false であることがわかります。

「 true OR false 」も右側のオペランドを見るだけで、この論理式の結果は true であることがわかります。

 

オブジェクトが null でない場合に、値の評価を行うプログラムロジックは頻繁に使用します。

このとき、「&」 , 「 | 」と「&&」 , 「 || 」の使い方を間違えると痛い目にあいます。

String st =null;
if ((st != null) && (st.equals("A"))) { }   //右オペランドは評価されない
if ((st == null) || (st.equals("A"))) { }   //右オペランドは評価されない
if ((st != null) & (st.equals("A"))) { }    //実行時にエラーとなる
if ((st == null) | (st.equals("A"))) { }    //実行時にエラーとなる

一般的に if 文などの条件式で使用する場合、「&」 , 「 | 」は使用せず「&&」 , 「 || 」を使用します。

 

4. ビット演算子

ビット操作をするための演算子です。

比較算子は 2 つのオペランドの間に記述し、オペランドの型は整数または boolean でなければいけません。

 

ビット演算子
優先 演算子 意味 オペランドの型
1 ~ ビット反転 !A 整数,boolean
4 << 左シフト A << 3 整数
4 >> 右シフト(符号) A >> 3 整数
4 >>> 右シフト A >>> 3 整数
7 & AND A & B 数値(論理演算では boolean )
8 ^ XOR A ^ B 数値(論理演算では boolean )
9 | OR A | B 数値(論理演算では boolean )

 

5. 条件演算子

条件式にの評価結果に対応する値を返す演算子です。

左側のオペランドには比較条件を書き、右側のオペランドには条件を満たす場合に返す値と、満たさない場合に返す値を「 : 」で区切って書きます。

 

int d2 = d1 > 9 ? 1 : 2;

↓if 文で書くと

if (d1 > 9) {
    d2 = 1;
} else {
    d2 = 2;
}

 


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.