Javaの単項演算子をやさしく理解する
最初は「記号がいっぱいで難しそう…」と感じるかもしれません。けれど、単項演算子は「数値に1つだけ操作をする記号」です。動き方をひとつずつ、手で動かして確かめれば大丈夫。
単項演算子の基本
- 意味: 値ひとつに対して使う演算子(+、-、++、– など)。
- 目的: 数の符号を変えたり、1を足したり引いたりするシンプルな操作。
単項プラス(+)
- 役割: 値をそのまま使う(実質何もしない)。
- イメージ: 「その数でOK」の確認スタンプ。
int a = 10;
System.out.println(+a); // 10(そのまま)
Java- 使いどころ: 可読性のために明示したいとき以外、ほぼ使わない。
単項マイナス(-)
- 役割: 符号を反転する(プラス⇄マイナス)。
- イメージ: 数字の向きをひっくり返すスイッチ。
int a = 10;
System.out.println(-a); // -10
int b = -7;
System.out.println(-b); // 7(マイナスが反転してプラスに)
Java- ポイント: 計算の途中でも使える。
例)int c = -(2 + 3); // -5
型に関する注意点(byte / short)
- 自動拡張:
byteやshortに+や-を使うと、内部ではintに一時的に広がる。 - 代入時: そのまま代入するとエラーになる場合がある(キャストが必要)。
byte x = 5;
// byte y = -x; // コンパイルエラー(intに拡張されるため)
byte y = (byte)(-x); // キャストするとOK
Java- 初心者向け結論: まずは
intを使うのがおすすめ。
インクリメント(++)とデクリメント(–)
前置(++a / –a)と後置(a++ / a–)の違い
- 前置: 先に変化してから、その値を使う。
- 後置: 今の値を使ってから、あとで変化する。
int a = 5;
System.out.println(++a); // 6(先に+1してから表示)
System.out.println(a); // 6
int b = 5;
System.out.println(b++); // 5(今はそのまま表示、あとで+1)
System.out.println(b); // 6(ここで増えている)
Java- 使いどころ: ループで数を数えるときに超便利。
for (int i = 0; i < 3; i++) {
System.out.println(i); // 0, 1, 2
}
Javaつまずきやすい例と解説
例1: 足し算の中の単項マイナス
int a = 4;
int b = -(a + 3); // a+3 を計算してから符号を反転
System.out.println(b); // -7
Java- 理解ポイント: カッコの中を先に計算して、最後に「-」でひっくり返す。
例2: 前置と後置の見分け
int a = 10;
int x = ++a; // aは11、xも11
int y = a++; // yは11(その時点のa)、aは12に増える
System.out.println(a); // 12
System.out.println(x); // 11
System.out.println(y); // 11
Java- 理解ポイント: 「前置=先に増える」「後置=あとで増える」。
例3: 配列インデックスと後置
int[] arr = {100, 200, 300};
int i = 0;
System.out.println(arr[i++]); // 100(先に使う → あとで i が 1 になる)
System.out.println(i); // 1
System.out.println(arr[i]); // 200
Java- 理解ポイント: 「使ってから増える」動きがわかるとミスが減る。
ミニ練習問題(手で動かして確認)
- 符号反転の基本
int n = -12; int m = -n; System.out.println(m); // いくつ?- 答えのヒント: マイナスをひっくり返す。
- 前置と後置の違い
int a = 3; int x = a++; // x は? int y = ++a; // y は? System.out.println(a); // 最終的な a は?- 考え方: 「後置はあとで」「前置は先に」。
- 式の中のマイナス
int a = 2; int b = 3; int c = -(a * b) + ++a; // c は? System.out.println(a); // a は?- 順序: かけ算→符号反転→前置インクリメント→足し算。
- キャストの確認(応用)
byte p = 120; byte q = (byte)(-p); System.out.println(q); // いくつ?(ヒント: 範囲に注意)- ヒント: byte は -128〜127。範囲外は丸められる。
使うときのコツ
- 読みやすさ重視: 式が複雑になったら、途中の値を変数に分ける。
- 前置/後置は最小限: 意図が伝わる書き方を優先(特に商用コードでは前置/後置の多用は避ける)。
- まずは int: 型の罠にはまらないための安全策。
まとめ
- 単項プラス: そのまま(ほぼ使わない)。
- 単項マイナス: 符号反転。式の最後に「向きを変える」イメージ。
- ++ / –: 前置は「先に変化」、後置は「あとで変化」。ループで大活躍。
- 型の注意: byte/short は内部で int になる。迷ったら int を使う。
