Java超|4章のまとめ

演算子と型のルールがつながると、Javaの式は「なんとなく」ではなく「理由を持って」読めるようになる。4章は、計算・代入・型変換を見抜くためのJava戦士の基礎修行。

4章では、Javaで計算や代入を行うために欠かせない 式・演算子・型変換 について学んできました。

最初は、足し算や掛け算のような基本的な計算から始まりました。

そこから、変数を使った計算、入力値を使った処理、インクリメント・デクリメント、複合代入演算子、演算子の優先順位、型変換、キャスト、異なる型どうしの演算へと進んできました。

一つひとつを見ると、細かいルールがたくさん出てきたように感じるかもしれません。

けれど、4章で学んだ内容はすべて、次の大きなテーマにつながっています。

4章の大きなテーマ内容
式をどう読むかどの部分が評価されて値になるのかを読む
演算子をどう読むか+、=、++、+= などの意味を判断する
値がどう変わるか変数の値が計算や代入でどう更新されるかを追う
型がどう関わるかint と double など、型によって結果が変わることを理解する
評価順をどう見るか優先順位、結合規則、丸かっこの働きを読む

ドラゴンボール風にたとえるなら、4章は Java戦士が演算技と型変換技を身につける基礎修行 です。

演算子は、戦士が使う技の型です。

オペランドは、その技に使うエネルギーや対象です。

式は、技を発動するための構えです。

型変換は、戦闘力の扱い方を整数モードから精密モードへ切り替えるような動きです。

どの技を先に出すのか。
どの型で力を扱うのか。
結果をどのカプセルへ記録するのか。

これらが分かると、Javaの式をずっと落ち着いて読めるようになります。

演算子はオペランドと組み合わせて式を作る

4章の出発点は、式と演算子 でした。

Javaでは、値や変数に対して計算や代入などの処理を行うために、演算子を使います。

たとえば、次のような式があります。

1 + 2

この場合、+ が演算子です。

1 と 2 がオペランドです。

要素意味
演算子計算や代入などを行う記号+、-、*、/、=
オペランド演算の対象になる値や変数1、2、num
評価されると値になるもの1 + 2、num + 5

式は、ただ記号が並んでいるだけではありません。

Javaがその式を評価すると、結果として値が得られます。

たとえば、1 + 2 は評価されると 3 になります。

1 + 2

評価後の値は 3 です。

ドラゴンボール風にたとえるなら、演算子は 技の型 です。

オペランドは 技に使う気の材料 です。

1 + 2 は、1 と 2 という2つの気を、+ の技で合成し、3 という結果を生み出す流れです。

Javaドラゴンボール風のイメージ
11つ目の気
+気を合成する技
22つ目の気
3技を発動した結果

この考え方が分かると、Javaの式は単なる記号の並びではなく、値が生まれる流れ として読めるようになります。

変数を使うと式は実践的になる

式では、数値を直接書くだけでなく、変数も使えます。

たとえば、num1 と num2 という変数がある場合、その2つの値を使って合計を求められます。

num1 + num2

この式では、num1 という名前そのものと、num2 という名前そのものを足しているわけではありません。

Javaは、num1 と num2 の中に入っている値を取り出して計算します。

式の考え方内容
num1 + num2num1 と num2 の値を足す
sum = num1 + num2足した結果を sum に代入する
num = num + 1num の現在値に 1 を足して更新する

変数を使えるようになると、プログラムは一気に実践的になります。

決まった数値だけを計算するのではなく、変数に入っている値に応じて結果を変えられるからです。

たとえば、次のような処理は、変数を使った演算が土台になります。

処理変数を使う理由
合計を求める複数の値を足して保存するため
回数を数える現在の回数を更新するため
残り数を減らす使った分だけ値を変えるため
点数を更新する追加点を反映するため
スコアを表示する変数の現在値を出力するため

ドラゴンボール風にたとえるなら、変数は 戦士が持っている現在の戦闘力カプセル です。

修行すれば戦闘力が増えます。

攻撃を受ければ体力が減ります。

アイテムを使えば残り数が減ります。

このように、状態の変化をJavaの中で表すために、変数と式が使われます。

入力値を使うと結果が変わるプログラムになる

4章では、キーボードから入力した値を使って計算する考え方も学びました。

入力値を使うと、実行するたびに結果が変わるプログラムを作れます。

手順内容
1キーボードから値を入力する
2入力値を変数に入れる
3その変数を式で使う
4計算結果を表示する

これは、とても大きな一歩です。

コードに直接書いた値だけを使う場合、結果は毎回同じになります。

しかし、入力値を変数に入れて式で使うと、使う人の入力によって結果が変わります。

つまり、Javaのプログラムが 固定された処理 から 状況に応じて動く処理 へ変わります。

ドラゴンボール風に言えば、司令室がその場で届いた戦闘データを受け取り、それに応じて作戦や技の威力を変えるようなものです。

たとえば、敵の戦闘力が毎回違うなら、計算結果も変わります。

修行回数が毎回違うなら、合計値も変わります。

入力値を使うことで、Javaのプログラムは現場の状況に合わせて動けるようになります。

図:4章で学んだ内容の全体像

この図が示していること

この図は、4章で学んだ内容が「式」を中心につながっていることを示しています。

演算子とオペランド、変数を使った計算、入力値を使った計算、インクリメント・デクリメント、複合代入演算子、優先順位、型変換、キャストは、それぞれ別々の知識に見えるかもしれません。

しかし、どれもJavaの式を正しく読み書きするために必要な考え方です。

式は、評価されると値になります。

その式の中で、どの演算子が使われているのか、どの値や変数がオペランドなのか、どの順番で評価されるのか、どの型として扱われるのかを確認することで、Javaの処理を理由を持って読めるようになります。

4章の内容は、単なる記号の暗記ではなく、Javaの処理を正しく理解するための土台です。

インクリメント・デクリメント演算子で1ずつ増減できる

4章では、インクリメント演算子とデクリメント演算子も学びました。

演算子意味
++値を 1 増やす
--値を 1 減らす

たとえば、count++ は、count の値を1増やす処理です。

これは、次の考え方と同じです。

短い書き方通常の考え方
count++count = count + 1
count--count = count - 1

インクリメントとデクリメントは、回数を数えたり、残り数を減らしたり、繰り返し処理で変数を更新したりするときによく使います。

ドラゴンボール風にたとえるなら、count++ は修行回数を1回増やす記録技です。

count-- は残りエネルギー札を1枚減らす消費技です。

Javaの処理ドラゴンボール風のイメージ
count++修行回数を1増やす
hp--体力を1減らす
itemCount--補給カプセルを1つ使う
turn++戦闘ターンを1進める

前置と後置の違い

インクリメントとデクリメントでは、前置と後置の違いも大切でした。

書き方意味
++a先に 1 増やしてから使う
a++使ってから 1 増やす
--a先に 1 減らしてから使う
a--使ってから 1 減らす

単独で使う場合は、前置でも後置でも最終的な値は同じです。

count++;
++count;

どちらも count を1増やします。

しかし、代入や他の式と組み合わせると、結果が変わることがあります。

result = count++;

この場合は、count の現在値を result に入れてから、count を1増やします。

result = ++count;

この場合は、count を先に1増やしてから、その値を result に入れます。

ドラゴンボール風にたとえるなら、前置は 先に気を高めてから技を出す 流れです。

後置は 今の気で技を出してから、あとで気が高まる 流れです。

種類技の流れ
前置先に状態を変えてから使う
後置今の状態を使ってから変える

この違いは、繰り返し処理や代入式を読むときにとても重要になります。

複合代入演算子を使うと処理を簡潔に書ける

4章では、= だけでなく、+= や -= などの複合代入演算子も学びました。

複合代入演算子は、演算と代入をまとめて書ける便利な演算子です。

複合代入演算子通常の書き方意味
a += ba = a + ba に b を足して代入する
a -= ba = a - ba から b を引いて代入する
a *= ba = a * ba に b を掛けて代入する
a /= ba = a / ba を b で割って代入する
a %= ba = a % ba を b で割った余りを代入する

たとえば、sum += score は、sum に score を足して、sum を更新するという意味です。

sum += score;

これは、次の書き方と同じ考え方です。

sum = sum + score;

複合代入演算子を使うと、コードが短くなるだけではありません。

この変数を更新している という意図も伝わりやすくなります。

ドラゴンボール風に言えば、sum += score は、これまでの総合修行点に新しい修行成果を加えて、総合修行点カプセルを更新するようなものです。

処理ドラゴンボール風のイメージ
total += score修行成果を総合点に加える
hp -= damageダメージ分だけ体力を減らす
power *= 2戦闘力を2倍に高める
energy /= 2エネルギーを半分に分ける
turn %= 33ターン周期の位置を求める

複合代入演算子は、値を少しずつ育てたり、消費したり、調整したりする処理でよく使います。

演算子には優先順位がある

4章の中でも特に大切だったのが、演算子の優先順位です。

Javaでは、式に複数の演算子がある場合、必ずしも左から順番に計算されるわけではありません。

たとえば、次の式を考えます。

3 + 2 * 5

この式では、* のほうが + より優先順位が高いため、先に 2 * 5 が計算されます。

先に計算される部分結果
3 + 2 * 52 * 513
(3 + 2) * 53 + 225

3 + 2 * 5 は、先に 2 * 5 が 10 になります。

そのあと、3 + 10 が計算されます。

結果は 13 です。

一方、(3 + 2) * 5 では、丸かっこの中が先に計算されます。

そのため、3 + 2 が 5 になり、5 * 5 で結果は 25 になります。

ドラゴンボール風にたとえるなら、優先順位は 技の発動順 です。

通常は、掛け算や割り算のような強い計算技が、足し算や引き算より先に発動します。

丸かっこは、この技を先に発動せよ という司令官の明確な指示です。

文字列連結では丸かっこが大切になる

演算子の優先順位でつまずきやすいのが、文字列連結と数値計算が混ざる場合です。

たとえば、次のような出力を考えます。

"1+2は " + 1 + 2 + " です。"

この場合、先頭が文字列なので、+ は文字列連結として働きます。

さらに + は左結合なので、左から順番につながっていきます。

評価の流れ結果
"1+2は " + 1"1+2は 1"
"1+2は 1" + 2"1+2は 12"
"1+2は 12" + " です。""1+2は 12 です。"

そのため、表示は 1+2は 12 です。 になります。

もし 1 + 2 を先に計算したいなら、丸かっこを使います。

"1+2は " + (1 + 2) + " です。"

この場合は、丸かっこの中が先に計算されるため、結果は 3 になります。

書き方表示される考え方
"1+2は " + 1 + 2文字列として 1 と 2 が連結される
"1+2は " + (1 + 2)1 + 2 を先に計算する

文字列と数値が混ざるときは、計算したい部分を丸かっこで囲むと安全です。

ドラゴンボール風に言えば、文字列連結の流れに計算技が巻き込まれないように、丸かっこの結界で先に発動させるイメージです。

図:演算子の優先順位と文字列連結の注意点

この図が示していること

この図は、演算子の優先順位と文字列連結で注意すべき点を示しています。

左側では、3 + 2 * 5 の評価順序を表しています。

Javaでは * が + より優先されるため、2 * 5 が先に計算されます。

その結果、3 + 10 となり、最終的な結果は 13 になります。

右側では、文字列と数値を + でつなぐ場合の注意点を表しています。

"1+2は " + 1 + 2 のように先頭に文字列があると、+ は文字列連結として左から処理されます。

そのため、1 と 2 は足し算されず、12 のようにつながります。

一方、"1+2は " + (1 + 2) のように丸かっこを使うと、1 + 2 が先に計算され、結果は 3 になります。

この図は、Javaの式を読むときに、優先順位、結合規則、丸かっこの有無を確認することが大切だと示しています。

型が変わると値の扱われ方も変わる

4章の後半では、型変換とキャストを学びました。

Javaでは、値をどの型として扱うかがとても大切です。

たとえば、int型は整数を扱います。

double型は小数を含む数値を扱えます。

扱える値のイメージ
int整数
double整数と小数

小さな型から大きな型へは、自動的に型変換されることがあります。

変換特徴
int → double自動で変換されることがある
double → intそのままでは代入できないことがある
double → int のキャスト小数点以下が切り捨てられる

たとえば、int型の 10 を double型に入れると、10.0 として扱われます。

これは、小さな型から大きな型への変換なので、Javaが自動で行える場合があります。

一方で、double型の 10.8 を int型に変換すると、10 になります。

小数点以下の .8 は切り捨てられます。

これは四捨五入ではありません。

元の値intへキャストした結果
10.810
3.93
7.17

このように、大きな型から小さな型へ変換すると、情報が失われることがあります。

そのため、Javaは勝手には変換せず、キャストによる明示的な変換を求めることがあります。

ドラゴンボール風にたとえるなら、double型は細かい気の量まで入る大型スカウターカプセルです。

int型は整数の戦闘力だけを記録する通常カプセルです。

大型スカウターカプセルの 10.8 という気を通常カプセルへ移すと、0.8 の細かい気は入りません。

だからJavaは、勝手にこぼすのではなく、キャストという明確な指示を求めます。

代入のときにも型変換が関わる

型変換は、演算のときだけでなく、代入のときにも関係します。

たとえば、int型の値を double型の変数に代入する場合、Javaは int を double に変換してくれます。

代入の例起こること
int の値を double に代入int が double に変換される
double の値を int に代入そのままでは危ないためキャストが必要な場合がある

代入は単に「値を入れるだけ」に見えます。

しかし、Javaでは代入先の型によって、値の扱われ方が変わります。

つまり、代入とは、値を移すだけでなく どの型の器に入れるのか を考える処理でもあります。

ドラゴンボール風に言えば、戦闘力を記録するとき、通常カプセルへ入れるのか、精密スカウターカプセルへ入れるのかを選ぶようなものです。

同じ値でも、どのカプセルへ入れるかによって、表現のされ方が変わります。

四則演算のときにも型変換が起こる

4章では、演算のときにも型変換が起こることを学びました。

たとえば、int型と double型を一緒に演算すると、int型の値が double型へ変換されてから計算されます。

演算処理のされ方
int + doubleint が double に変換されてから計算
int * doubleint が double に変換されてから計算
int / intint型のまま計算
double / intint が double に変換されてから計算

ここで特に重要なのが、int / int の割り算です。

整数どうしの割り算では、結果も整数として計算されます。

そのため、小数部分は切り捨てられます。

式の型結果の考え方
int / int整数の結果になる
double / intdouble にそろえて小数の結果になる
int / doubledouble にそろえて小数の結果になる

たとえば、5 / 4 を int型どうしで計算すると、結果は 1 になります。

1.25 にはなりません。

小数を含む結果がほしい場合は、少なくとも一方を double型にする必要があります。

(double)5 / 4

または、次のように小数の値を含めます。

5 / 4.0

ドラゴンボール風にたとえるなら、int型どうしの戦いでは、整数単位でしか結果を出せません。

小数まで含めた細かい気の配分が必要なら、戦う前に double型の精密モードへ切り替える必要があります。

異なる型どうしの演算では大きい型へそろう

異なる型どうしで演算すると、Javaは基本的に、より大きな型へそろえてから計算します。

たとえば、int と double を一緒に計算する場合、int の値が double に変換されます。

計算時の扱い結果
3 * 2.53.0 * 2.57.5
7 / 2int / int3
7.0 / 27.0 / 2.03.5
7 / 2.07.0 / 2.03.5

この違いは、とても大切です。

数字だけを見ると、7 / 2 と 7.0 / 2 は似ています。

しかし、型が違うため結果が変わります。

見た目型の見方結果
7 / 2int / int3
7.0 / 2double / int3.5
7 / 2.0int / double3.5

Javaでは、数字そのものだけではなく、その数字がどの型として扱われているか が大切です。

図:型変換と演算結果の流れ

この図が示していること

この図は、異なる型どうしの演算と、同じ int型どうしの演算の違いを示しています。

左側では、int型の 3 と double型の 2.5 を演算しています。

この場合、int型の 3 が double型の 3.0 に変換され、3.0 * 2.5 として計算されます。

結果は 7.5 になります。

右側では、int型の 5 と int型の 4 を割り算しています。

この場合、int型どうしの演算なので、結果も整数として扱われます。

そのため、5 / 4 は 1.25 ではなく 1 になります。

小数部分の 0.25 は切り捨てられます。

この図は、Javaの演算結果が数字そのものだけでなく、演算に参加している値の型によって決まることを示しています。

小数を含む結果が必要な場合は、演算が始まる前に double型を含める必要があります。

4章で学んだ内容を整理する

4章で学んだ内容を整理すると、次のようになります。

学んだこと内容
式と演算子演算子はオペランドと組み合わさって式を作る
変数を使った演算変数の値を使って計算や更新ができる
入力値を使った計算入力によって結果が変わるプログラムを作れる
インクリメント・デクリメント変数の値を 1 増やしたり 1 減らしたりできる
前置と後置先に増減するか、あとで増減するかが変わる
複合代入演算子演算と代入をまとめて簡潔に書ける
演算子の優先順位どの演算が先に行われるかが決まっている
丸かっこ評価の順番を明確に変えられる
型変換型が自動的に変わる場合がある
キャスト明示的に型を変換できる
異なる型どうしの演算大きい型にそろえてから演算される
同じ型どうしの演算その型のまま計算されるため注意が必要な場合がある

この表を見ると、4章の内容はかなり幅広く見えます。

しかし、すべて Javaの式を正しく理解する というテーマにつながっています。

Javaのコードは、見た目だけで判断すると間違えることがあります。

どの演算子が使われているのか。
どの順番で評価されるのか。
どの型として計算されるのか。
どの変数に代入されるのか。

これらを確認することで、Javaの式を理由を持って読めるようになります。

コードは見た目どおりに動くとは限らない

4章で大切だった考え方の1つは、コードは見た目どおりに動くとは限らないということです。

たとえば、次のような場面です。

見た目の印象実際の動き
3 + 2 * 5 は左から計算しそう* が先なので 13 になる
"1+2は " + 1 + 2 は 3 になりそう文字列連結で 12 になる
double に代入すれば小数になりそうint / int の結果は整数になる
double から int にそのまま入れられそう小数が失われる可能性があるのでキャストが必要

Javaは、決まったルールに従って式を評価します。

演算子の優先順位、結合規則、型変換、キャストのルールを知っていると、「なぜこの結果になるのか」を説明できるようになります。

ドラゴンボール風にたとえるなら、技の見た目だけで判断せず、どの技が先に発動するのかどのエネルギー形態で扱われているのか を見ることが大切です。

同じ数字でも、int型で戦うのか、double型で戦うのかで結果は変わります。

同じ + でも、数値の足し算なのか、文字列連結なのかで結果は変わります。

これから先の学習につながる大切な土台

4章で学んだ内容は、この先のJava学習でも何度も出てきます。

たとえば、条件分岐では比較演算子や論理演算子を使います。

繰り返し処理では、インクリメント演算子や代入演算子がよく使われます。

配列やオブジェクトを扱うようになっても、式の評価や型の理解は欠かせません。

今後の学習内容4章とのつながり
条件分岐比較演算子や論理演算子を使う
繰り返し処理++ や += をよく使う
配列添字の計算や更新で演算子を使う
メソッド引数や戻り値で型を意識する
オブジェクト指向型の考え方がさらに重要になる

4章は、単に計算の書き方を覚える章ではありません。

Javaのコードを正しく読み、意図どおりに書くための基礎を固める章です。

ドラゴンボール風に言えば、派手な必殺技へ進む前に、気の扱い方、技の発動順、エネルギーカプセルの種類、変換のタイミングを身につける修行です。

ここが安定すると、条件分岐や繰り返し処理も理解しやすくなります。

4章の内容を読むときの考え方

4章の知識を実際に使うときは、次のように考えると分かりやすくなります。

見るポイント確認すること
演算子どんな処理をしているか
オペランド何に対して演算しているか
優先順位どこが先に評価されるか
丸かっこ評価順を変えているか
int なのか double なのか
代入先結果をどの型の変数に入れるか
キャスト明示的に型を変えているか

この見方ができるようになると、複雑に見える式も少しずつ分解して読めます。

式を見たときに、いきなり全体を理解しようとする必要はありません。

次の順番で見ていくと、落ち着いて理解できます。

順番見ること
1どの演算子があるか
2どの演算子が先に評価されるか
3オペランドの型は何か
4結果はどの型になるか
5どこに代入されるか

Javaの式は、分解して見ると必ずルールに沿って動いています。

そのルールを知っていれば、結果をなんとなく予想するのではなく、理由を持って説明できます。

Javaの式を自信を持って読むために

4章で学んだことは、どれもJavaの基礎ですが、実際のコードを読むうえではとても重要です。

演算子は短い記号なので、意味をあいまいにしたまま読み飛ばしやすいです。

しかし、+、=、++、+=、/、キャストなどは、ほんの少し意味を取り違えるだけで、結果が変わることがあります。

特に意識したいのは、次の3つです。

大切な視点内容
式は評価されて値になるJavaは式をルールに従って処理する
演算子には順番がある優先順位と結合規則を意識する
型によって結果が変わるint と double の違いを意識する

ドラゴンボール風にたとえると、4章で学んだ内容は、Java戦士としての基礎鍛錬です。

技の順番、気の型、力の受け渡し方を理解することで、次の章から出てくる複雑な処理にも対応しやすくなります。

4章で身につけた 式を分解して読む力 は、この先の条件分岐、繰り返し、配列、メソッド、オブジェクト指向の学習でもしっかり役立ちます。