演算子
- 演算子とは:計算や比較の際に用いる記号のこと
- 演算子には優先順位がある。下の表では、上にいくにつれて優先度が上がっていく。
- また、優先順位が同じ演算子の場合、左から右へ計算するかその逆かがある(結合規則)。
種類 | 演算子 | 結合規則 |
---|---|---|
単行演算子 | ++, --, +, -(数値の±意味), ~, !, (キャスト) | 右から |
算術演算子 | *, /, % | 左から |
〃 | +, - | 〃 |
シフト演算子 | <<, >>, >>> | 左から |
比較演算子 | <, >, <=, >=, instanceof | 左から |
〃 | ==, != | 〃 |
ビット演算子 | & | 左から |
〃 | ^ | 〃 |
〃 | | | 〃 |
論理演算子 | && | 左から |
〃 | || | 〃 |
三項演算子 | ? : | 右から |
代入演算子 | =, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= | 右から |
※文字列に対して+演算子を使用すると文字列を結合することができる
※「数字+文字列」でもエラーにならない。数字は文字列として扱われ、文字列結合されたものになる。(boolean型も同じ、文字列として結合される)
算術演算子
数値を計算する際に用いる。
文字列の連結にも用いることもできる。
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y = 2;
System.out.println(x + y); //足し算
System.out.println(x - y); //引き算
System.out.println(x * y); //掛け算
System.out.println(x / y); //割り算
System.out.println(x % y); //剰余(割り算のあまり)
System.out.println(-(x + y)); //符号の反転
}
}
//出力結果:
//12
//8
//20
//5
//0
//-12
以下では、「整数 / 小数」の計算結果は、小数になっていることがわかる。
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y = 2;
double z = 2.0;
System.out.println(x / y);
System.out.println(x / z);
System.out.println(x % y);
}
}
//出力結果:
//5
//5.0
//0
以下では、+演算子を使って文字列の連携を行なっている。
全てString型に吸収されていることがわかる。
Training.java
class Training {
public static void main(String[] args){
String text = "Text";
int num1 = 2;
double num2 = 2.0;
boolean t = true;
String n = null;
System.out.println(text + num1);
System.out.println(num1 + text);
System.out.println((num1 + 5) + text);
System.out.println(num2 + text);
System.out.println(t + text);
System.out.println(n + text);
}
}
//出力結果:
//Text2
//2Text
//7Text
//2.0Text
//trueText
//nullText
関係演算子
真偽を判断する際に用いる。
そのため、関係演算子を用いた際、必ずboolean型のtrue, またはfalse
が返ってくる。
※if文などの条件分岐でよく用いられる。
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y = 2;
int z = 10;
System.out.println(x > y); //xはyより大きいか
System.out.println(x < y); //xはyより小さいか
System.out.println(x >= z); //xはz以上か
System.out.println(x == z); //xとzは等しいか
System.out.println(x != z); //xとzは異なるか(not イコール)
}
}
//出力結果:
//true
//false
//true
//true
//false
※=は必ず右側にくる
論理演算子
複数の条件を比べる際に用いる演算子。
論理演算子 | 説明 |
---|---|
& | すべての条件がtureにならない限りfalseを返す。比較時にfalseとなった場合もそれ以降の値を評価する。 |
| | 条件のうちどれか一つでもtrueであればtrueを返す。比較時にtrueとなった場合もそれ以降の値を評価する。 |
&& | すべての条件がtureにならない限りfalseを返す。比較時にfalseとなった場合、それ以降の値は評価されない。 |
|| | 条件のうちどれか一つでもtrueであればtrueを返す。比較時にtrueとなった場合、それ以降の値は評価されない。 |
^ | 比較対象の値が異なる時、true。そうでなければfalse。つまり、not。 |
真偽値を反転させる際に用いる演算子。
論理演算子 | 説明 |
---|---|
! |
!a で説明する。aがtrueの時falseにする。つまり、booleanの反転。これは、複数の値を比較するものではない。 |
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y = 2;
System.out.println(x > 2 && x > 15); //xは2より大きい、かつ15より大きい
System.out.println(y >= 10 || y == 2); //yは10以上、または2と等しい
}
}
//出力結果:
//false
//ture
以下では、&
と&&
の違いを表している。
&&
の場合は、false(num3++ > 10)となった段階で、それ以降を評価していないことがわかる。
そのため、++num4が実行されない。
Training.java
class Training {
public static void main(String[] args){
int num1 = 10, num2 = 10, num3 = 10, num4 = 10;
boolean result = num1++ > 10 & ++num2 > 10;
System.out.println(result+":"+num1+":"+num2);
boolean result2 = num3++ > 10 && ++num4 > 10;
System.out.println(result2+":"+num3+":"+num4);
}
}
//出力結果:
//false:11:11
//false:11:10
複合代入演算子
これまで変数にデータを代入する際に使用していた=は、代入演算子と呼ばれる。
複合代入演算子は、代入演算子に算術演算子を組み合わせた演算子のこと。
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y = 2;
System.out.println(x += 10);
System.out.println(y *= 5);
}
}
//出力結果:
//20
//10
※=は必ず右側にくる
インクリメント・デクリメント
インクリメント・デクリメント演算子を後ろ、または前に持ってくるのかで挙動が変わってくる。
これらは主に、for文で用いられることがほとんど。(for文では後置、前置どっちでもいい)
後置インクリメント・デクリメント
インクリメント・デクリメントが書かれた文(1行)の処理が終わった後に、+1、または-1を行う。
代入される側の値に注意。
- インクリメント(後置):
変数++
- デクリメント(後置):
変数--
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y;
y = x++; //yにxの値を代入した後に、xに1足す(文の処理後に+1)
System.out.println(x);
System.out.println(x++); //xを出力した後に、xに1足す(文の処理後に+1)
System.out.println(y);
System.out.println(x);
}
}
//出力結果:
//11
//11
//10
//12
前置インクリメント・デクリメント
先に、+1、または-1を行い、値を取得する。
代入を伴う際、値が変わる心配が不要。
- インクリメント(前置):
++変数
- デクリメント(前置):
--変数
Training.java
class Training {
public static void main(String[] args){
int x = 10;
int y;
y = ++x; //処理の先にxに1足す
System.out.println(x);
System.out.println(++x); //処理の先にxに1足す
System.out.println(y);
System.out.println(x);
}
}
//出力結果:
//11
//12
//11
//12