【Java入門】javaの演算の基礎(初学者向け)


1年目の駆け出しプログラマです。復習を兼ねて、自分用メモを整理して公開したものです。
間違っている可能性も高いのでお気を付け下さい。

心構え

  • 学校で習った数学のイメージでやると違いにビビる
x = x + 1;

とか

count += 2;

とか、プログラマとしては「ああ、はい」といった感じなのだが初めてプログラミングを始めたばかりの人からすると「!??」となることがある。

  • このように一般的な数学の演算子の意味と異なることがあるので、基本的には別の意味と思って臨むことが必要。

その上で共通な所を見出していけばよい。

式の構成要素

  1. 演算子(Operater):「+」「-」「=」など
  2. オペランド(Operand):演算子以外のこと

リテラル(Literal)

  • ソースコードに記述されている値であり、それ自体が要素となるもの
  • オペランドとの違いは、リテラルは記述された値そのものが要素となるが、オペランドは記述された値が要素そのものとは限らない
int a , b;
a = 10;          //10は整数リテラル
b = a + 27;     //a,b,27はオペランドだが、リテラルは27のみ

boolean flag;
flag = true;     //trueはbooleanリテラル

評価

  • 演算子は周囲のオペランドを使って計算を行い、オペランドと共に値へと変化する
int numA = 1;
int numB = 2;
int ans = numA + numB;
// 演算子+がnumAとnumBと共に値3へと変化する。

if(numA < numB){
    System.out.println("numAはnumBより小さい");
}
// 演算子>がnumAとnumBと共にtrueへと変化する

System.out.println(numA == numB);
// 実際に文字出力すると、結果はfalseになる

演算子

  • 右記サイトが分かりやすい(丸投げ)。参考)Javaの道:演算子

  • ざっと表にまとめておく

種類 演算子 意味(ざっくり) 備考
算術演算子 + 足す
- 引く
* 掛ける
/ 割る
% 余りを求める
代入演算子 = 右辺を左辺に代入する
+= 左辺に右辺を足した値を代入する
-= 左辺から右辺を割った値を代入する
*= 左辺に右辺を掛けた値を代入する
/= 左辺から右辺を割った値を代入する
%= 左辺割る右辺の余りを代入する
インクリメント演算子 ++ 値を1増加させる a++と++aで意味が異なる
†注1
デクリメント演算子 -- 値を1減少させる a--と--aで意味が異なる
†注1
比較演算子 == 等しい †注2
!= 等しくない
> 大きい
>= 以上
< 小さい
<= 以下
論理演算子 & かつ
&& かつ 短絡評価を行う
†注3
|
|| または 短絡評価を行う
†注3
! 否定

†注1:a++は値を代入してから+1する。++aは+1してから代入する。

int a = 0;
int b = 0;
System.out.println(a++);    // 結果は0
System.out.println(++b);    // 結果は1

System.out.println(a);    // 結果は1
System.out.println(b);    // 結果は1

でも実際i++;とか単独で見ることがほとんどで、区別できないと駄目ってコードは(今の所)見たことないし書いたこともない。
頭の片隅において置けばいいと思う。

†注2:オブジェクトの比較を行う場合注意が必要。参考)オブジェクトの比較
†注3:短絡評価とは

int num = 5;
if(num > 2 || num > 7){
    // 処理A 
} else {
    // 処理B
}

のような処理があった場合、num > 2 の評価が終わった時点でtrueとなることが確定しているためnum > 7の評価を行わない。
このように評価が確定した時点で、以降の不要な評価を行わないことを短絡評価という。

三項演算子

  • 下記のように使用する
書き方
[条件] ? [TRUEの場合の返却値] : [FALSEの場合の返却値] ;
  • 安易に使用すると可読性が悪い、と言われるため注意が必要。慣れるまでは読むとき専用で覚えるとよい
int n = a > 0 ? 1 : 0 ;
// 意味は以下と同じ

int n;
if(a > 0){
    n = 1;
} else {
    n = 0;
}

参考)