検索

キーワード


【Java】ハンズオンセミナー用コード解説 トレーニング3 <複合代入演算子、インクリメント/デクリメント>

  • 公開日:2020-07-09 18:46:11
  • 最終更新日:2021-01-22 14:45:51
【Java】ハンズオンセミナー用コード解説 トレーニング3 <複合代入演算子、インクリメント/デクリメント>

こんにちは、駆け出しプログラマーの若江です!

ここでは初学者として学習を終えた私が、アウトプットの意味も込めて複合代入演算子・インクリメント/デクリメント についてご紹介させていただきます。

できる限り初学者が理解しやすい内容として紹介させていただくので、参考となれば幸いです!


関連記事リンク:算術演算子と複合演算子の紹介 / 比較演算子、論理演算子、ビット演算子、シフト演算子の紹介

複合演算子

複合演算子とは代入演算子(=)に算術演算子(+, -, *, /)を組み合わせたもののことを指します。

さまざまな場面で扱うことになるので、ここでしっかりと押えておきましょう!


複合演算子の書き方

複合演算子は計算と代入をまとめて行うイメージで覚えておきましょう。

通常の計算式とは異なり、” a += 1” のように短く表記するのが特徴です。

これは " a = a + 1 (変数aに1を足した値)"と同じ意味になります。

まずは上記に従って、複合演算子を書いてみましょう。

//最初に初期値を設定します。(初期値がない場合はコンパイルエラーとなります)
int a = 0;

//次に「0」の値を持った「a」に対して「1」を足します。
a += 1;

//結果「a」が持つ値は「1」となります。
System.out.println(a);

※初期値とは変数(a)が何者なのか、最初に情報をセットしておくことです。


複合演算子の種類

複合演算子には和算(+)、減算(-)、乗算(*)、除算(/)の四則演算に加えて、余剰(%)の5つがあります。

この聞きなれない余剰とは、割り算をした結果の余りを値として渡します。

それぞれを複合演算子で表記すると以下のようになります。

和算:a += 1; → ("a = a + 1" と同じ意味)

減算:a -= 1; → ("a = a - 1" と同じ意味)

乗算:a *= 1; → ("a = a * 1" と同じ意味)

除算:a /= 1; → ("a = a / 1" と同じ意味)

余剰:a %= 1; → ("a = a % 1" と同じ意味)

//初期値
int a = 1;
//和算
a += 1;
//結果 a(1)に1を足して2となる
System.out.println(a);
//初期値
int a = 1;
//減算
a -= 1;
//結果 a(1)から1を引いて0となる
System.out.println(a);
//初期値
int a = 1;
//積算
a *= 1;
//結果 a(1)に1を掛けて1となる
System.out.println(a);
//初期値
int a = 1;
//除算
a /= 1;
//結果 a(1)を1で割って1となる
System.out.println(a);
//初期値
int a = 1;
//余剰
a %= 1;
//結果 a(1)を1で割った後の余り0となる
System.out.println(a);



インクリメント演算子/ディクリメント演算子

複合代入演算子の和算、減算にはもう一つ別の顔があります。

前置、後置の概念を持つインクリメント演算子、ディクリメント演算子です。

・インクリメント演算子: ++

 変数の値を1増やします。" a++" と "a += 1" はほぼ同じ結果になります。

・ディクリメント演算子: --

 変数の値を1減らします。" a--" と "a -= 1" はほぼ同じ結果になります。


●前置/後置

先述での「ほぼ」同じ結果というのは、前置・後置に理由があります。

インクリメント演算子、ディクリメント演算子の「前置」「後置」には、

最終的な結果はどちらも同じですが、

変数を使う「前」に計算する(前置)か、変数を使った「後」に計算する(後置)かの差に特徴があります。

・++a :変数(a)よりも前にインクリメントが表記されているものを「前置」と言います。

・a++ :変数(a)よりも後にインクリメントが表記されているものを「後置」と言います。

前置、後置の比較を見てみましょう。

int a = 1;
//インクリメント(前置)結果:a(1)を表示する前に1足して2になります。
System.out.println(++a);
int a = 1;
//インクリメント(後置)結果:a(1)を表示した後に1足しますが、表示時点では"a = 1"なので結果は1が表示されます。
System.out.println(a++);
int a = 1;
//ディクリメント(前置)結果:a(1)を表示する前に1引いて0になります。
System.out.println(--a);
int a = 1;
//ディクリメント(後置)結果:a(1)を表示した後に1を引くため表示は1になります。
System.out.println(a--);


このようにインクリメント、ディクリメント共に瞬間の結果は異なりますが、

変数が最終的に保持する値は「++a」「a++」共に同じ「2」となります。


◆より分かりやすく比較するため和算を例に、

インクリメントの「前置」「後置」を使う場合と使わない場合の記述方法も確認しておきましょう。

//インクリメント(前置)を使った場合
int a = 1;
System.out.println(++a); //結果 = 2

//インクリメント(前置)を使わない場合の書き方 <表示前に1足す>
int a = 1;
a = a + 1;
System.out.println(a); //結果 = 2
//インクリメント(後置)を使った場合
int a = 1;
System.out.println(a++); //結果 = 1

//インクリメント(後置)を使わなかった場合の書き方 <表示後に1足す>
int a = 1;
System.out.println(a); //結果 = 1
a = a + 1;



まとめ

複合代入演算子はコーディングを簡単にする役割の他、

インクリメントやディクリメント、

前置・後置などがありどれも多く使われる演算子となります。


関連記事リンク

算術演算子と複合演算子の紹介 / 比較演算子、論理演算子、ビット演算子、シフト演算子の紹介




【著者】

若江

30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様