
今回は
というテーマでお送りします。

頑張ります。今回も、よろしくお願いします。


【Youtube版】
Youtubeでもお伝えしていますので
是非チェックしてくださいね。
【1】代入の原則

代入演算子で、右辺から左辺にデータを
代入する事を学びました。
そして その時に、大切な原則があります。
それは…
この事が必要になります。
変数・定数やリテラルは
データ型を持っていましたね。
変数・定数・リテラルのデータ型については
以下の記事で解説しています。
参考にして頂けたらと思います。
そして、このデータ型が、代入演算子の
右辺と左辺で、同じである事が必要になります。

変数は「箱」というお話をしましたが
「箱」の形が同じでなければ代入ができません。
まずは、この原則を押さえておきましょう。
【2】自動的な型変換

① 代入時
前のコーナーで、
というお話をしました。
そして、これを実現するために、左辺と右辺の型が違う場合に
代入する前に、一時的に型を 変換してくれる機能があります。
どんな場合に機能するかというと…
データ型は箱という話をしていますが
小さい箱の値は、大きい箱の型に
変換して代入できるという意味です。

大小関係は、以下のようになります。
ここで、char については1文字を表す文字コードが
格納されています。16ビットです。
この文字コードを数値として扱う場合には
shortの16ビットと同じように扱うことができます。
ただし、このあたりは あまり使われる事がなく
主に 今回の概念に当てはまるのは
についてです。
例を見ていきましょう。
double b = a;
この b = a;
の場合には
【左辺のデータ型】double : 【右辺のデータ型】int
となっていますが、この場合には代入前に
右辺の値が自動的に int から double に変換されます。
つまり、こうなります。
【左辺のデータ型】double : 【右辺のデータ型】double

すると、同じデータ型になり
左辺に代入できることになるのです。

その大きい箱の型に 自動的に変換してくれるんですね。
気が利いくって 感じですね~。
②演算時
次は 演算時のお話しです。
ここでは、2つお話しますね。
❶ 基本データ型
演算の時には、大きな型に揃えられます。
例えば、int と double では、double になります。
そして、この時に 大切な考えがあります。
式は、優先順位 と 結合規則に従って
段階的に 評価されるというお話をしました。
そして、その
という事です。
例えば、こんな例を考えてみましょう。
この式の後の double型変数 a の値は何でしょう。


右辺に 2.0 という double型のリテラルがあるので
double型で 計算されると思います。


Nice, Try です!
そして、式を見ていきましょう。
この式の中には演算子が3つありますね。
= と / と * ですね。
このうち、優先順位は / と * が同じで
= が最も低い演算子です。
そして、同じ優先順位の / と * は
結合規則が 左から右でした。
前回 見た表を再度見てみましょう。

まず、演算子には、優先順位 と 結合規則 がありましたね。
そして、* と / は 優先順位が高かったですね。
一方で、代入演算子の = は優先順位が低かったです。
また、同じ優先順位の * と / は
結合規則で左から右でした。
演算子の「優先順位と結合規則」と
「評価」についての概念については
以下の記事で解説しています。
参考にしてくださいね。
すると式の評価は
① /
② *
③ =
の順になります。
まず 3 / 2 を評価しますが
ここは左辺・右辺がともに int型のリテラル ですね。
ですので、この評価結果は int型 となります。
3 割る 2 の商の 1 が評価結果になります。

次に、この 1 と 2.0 の掛け算です。
2.0 は double型のリテラルです。
ですので、評価する時に double型に 揃えられます。
1.0 * 2.0 となって
評価結果は 2.0 となります。

最後が代入演算子。右辺から左辺への代入ですが
ここは左辺も右辺も double なので
そのまま a には、2.0 が代入されます。
ということで、a の値は 2.0 です。

これが
という事なのです。


部分的に評価する時に 型 も決まるんですね。
int型 と int型 の部分が先に評価される時は
その部分は int型なんですね。
理解しました。
❷文字列連結
+ の演算子は、左辺または右辺がString型の場合には
文字列連結を行います。
この時にString型でないオペランド(変数・定数・リテラル)は
自動的にString型に変換されます。

この時にも、式は 評価・優先順位・結合規則に沿って
評価される事を 押さえておきましょう。
前回の復習になりますが、評価・優先順位・結合規則の
イメージを再確認しておきましょうね。
このような式を考えましょう。
int f = 20;
式1)String g = e + f + “円が合計です。”;
式2)String h = “合計は” + e + f + “円です。”;
int型の変数 e は 50, f は 20 で初期化しています。
そして、合計を表示する場合です。
式1では優先順位と結合法則で、この順に評価されますね。
(❶・❷・❸)
e + f の部分は、左辺も右辺も int なので 算術演算子(加算)で
評価の結果は 70 と評価されます。

そして、この70 と “円が合計です。” の + は文字列連結です。
右辺が文字列ですからね。
そして、70 は自動的に文字列に変換されて
文字列連結されるので
評価の結果は “70円が合計です。” になります。
そして、この “70円が合計です。” が左辺に代入されます。

式2では優先順位と結合法則で、この順に評価されますね。
(❶・❷・❸・❹)
まずは “合計は” + e が評価されます。
左辺が String型リテラル なので、文字列連結されます。
50 は自動的に文字列に変換されて
評価結果は “合計は50” になります。

次にこの文字列と 20 が文字列連結されて
“合計は5020” になります。
更に、この文字列と “円です。” が文字列連結され
“合計は5020円です。” になって、この文字列が左辺に代入されます。

ただ、この式2は 本来は e + f を優先的に評価したいですね。
この場合には、() 丸括弧 をつけます。
この () をつければ、優先的に評価されるで
演算子は算術演算子(加算)となり…
int型の 70 が評価の結果になりますね。

そして、最終的に”合計は70円です。”になります。
ここでも、優先順位と結合規則に従って評価されること。
評価される単位でデータ型が決まる事を
押さえておきましょうね。

復習しました。完璧に、理解しました。
【3】明示的な型変換

①キャスト
代入時に、左辺の型のほうが大きければ
Javaが自動的に型変換してくれます。
ただし、左辺の型のほうが小さい場合には
明示的に型変換する必要があります。
この型変換することを「キャスト」といいます。

キャスト演算子()を使用して、対象の左側に記述します。
丸括弧の中には、変換したいデータ型を記述します。

例えば、このような感じです。
int price = 20;
int result = (int) (price * TAX_RATE);
税率を表す TAX_RATE という定数を 1.08 で初期化します。
価格を表す price という変数を 20 (円) で初期化します。
price * TAX_RATE は オペランドの型の大きいほうに
揃えられるので
TAX_RATE の double型 に揃えられて
20.0 * 1.08 で評価結果は 21.6 になります。

そして結果を int型(円単位)にしたい場合を考えます。
この場合に、キャスト演算子を使って
丸括弧の中には、変換したいデータ型 int を書きます。
すると、右辺は小数点以下が切り捨てられた
int型の 21 に変換されます。

すると
【左辺のデータ型】int : 【右辺のデータ型】int
が成り立ちますね。
こうなると、代入が実行できることとなるのです。
左辺の result には 21 が代入されます。
この場合、キャスト演算子を使用しないと
コンパイル時にエラーが出ます。
double を intに代入しようとしているからですね。
そして もう1つ、このキャスト演算子は
優先順位が高い事も 注意が必要です。

前回の表に付加しました。
キャスト演算子は、四則演算より上位に位置します。
従って、
この式で (price * TAX_RATE) の括弧をつけないで
としてしまうと…。
まずは (int) price が評価されて int型の 20
そして次に 20 * 1.08 が評価されて
double型の 21.6 になります。
最終的に、この doubleの値を result に代入しようと
するのでコンパイル時にエラーが出てしまうのです。

ここも押さえておきましょうね。
②String型

ここでは、String型と 数値(int/double)型の変換について
見ていきましょう。
❶ String型 ⇒ int型の変換
まず、String型をint型に変換する方法です。
Javaの機能を使用します。
int b = Integer.parseInt(a);
この場合 Integer.parseInt(a) を行う事によって
String型 の文字列 が int型の数値に変換されます。

int b = 10; このように変換されて
右辺から左辺への値の代入が できることとなります。
1つの書き方と思って覚えておきましょう。
❷String型⇒double型の変換
次に、String型をdouble型に変換する方法です。
こちらもJavaの機能を使用します。
double d = Double.parseDouble(c);
この場合には、Double.parseDouble(c) によって
文字列 “12.34” が 数値 12.34 に変換されます。

double d = 12.34; このように変換されて、右辺・左辺ともに
double型となり 右辺の値が左辺に代入される事となります。
❸数値(int/double)型⇒String型
最後は数値データをString型に変換する場合です。
String aStr = String.valueOf(a);
この場合には、String.valueOf(a)で 数値⇒文字列変換されて
“10” に変換されます。

従って String aStr = “10”; となり
右辺が左辺に代入される事となります。
また、他の簡単な方法もあります。
String aStr = “” + a;
自動的な型変換を利用して、このように書く方法です。
この場合には + の左辺が文字列(長さが0の文字列)で
右辺はint型変数で、値は 10 です。
この場合には + は連結演算子となりますね。
そして、String型 以外は自動的に String型 に変換されます。
従って、 String aStr = “” + “10”; となって
String aStr = “10”; となり、左辺に代入されることとなります。

String型と 数値(int/double)型の変換について
まとめると、このようになります。

Integer.parseInt(String型変数)
Double.parseDouble(String型変数)
String.valueOf(数値型変数)
または
“” + 数値型変数
という方法で変換します。

しっかり、ノートしておきました。
実際にプログラミングしながら、習得していきます。

【4】入出力・エスケープ
プログラミングを していく上での
知っておきたいことを 2つ お話していきます。
①標準入出力

✅ 標準出力:画面表示
Javaの標準入出力は
キーボードからの入力を標準入力として
画面表示を標準出力として扱います。
ここでは、基本的なJava機能の使い方を お伝えしていきます。
❶ キーボードからの1行入力
String型変数の str に キーボードから入力した1行を
代入する場合には、このように書きます。
右辺の書き方には、それぞれ意味がありますが
少し学習が進んだところで 説明していきますね。
今のところ、これで入力した1行の文字列が受け取れる
と理解しておきましょう。
少し長いですが、コピーできるようにしておいて
コピーして使うなどして使っていきましょう。

❷ 画面への表示
System.out.print(表示したい内容);
画面表示については、既に学んだ通り

System.out.println を使います。
System.out.print を使います。
まとめると、こうなります。

②エスケープシーケンス

記述する時に使用する。
✅ 改行やTabなどの特別な意味を
表す方法。
✅ \(円記号)を使って後の文字に
特別な意味を持たせる。
この、エスケープシーケンスは
改行などの制御文字の表現とともに
文字列リテラルの開始・終了を表す “(ダブルクォーテーション)を
文字列の中で表現する場合などにも 使用します。
良く使われる エスケープシーケンスは
このようなものがあります。

改行を表す \n
Tabを表す \t
“(ダブルクォーテーション) を表す \”
‘(シングルクォーテーション) を表す \’
\ 記号自体を表す \\
例えば、このように書いた場合…
画面に表示される内容は、このようになります。
Java勉強中。
改行されている事と、”(ダブルクォーテーション)が
表示される事を 確認しておきましょうね。


何だか、本格的な感じがしますね。
進化してきた感じがしています。

これからも、頑張りますっ!
【まとめ】

・左辺の型が大きい時のみ
右辺の型を自動的に型を変換してから代入。
(一時的に型変換する)
・型の大小関係
double > float > long > int
> short (char) > byte
② 演算時
❶ 基本データ型
・演算の時には、大きな型に揃えられる。
・優先順位と結合規則に従って
段階的に評価される毎に型が決まる。
❷ 文字列連結
・演算子 + は、左辺・右辺のどちらかが
String型の時には 文字列連結 となる。
・このとき、String型でないオペランドは
自動的に String型に変換される。
・明示的に型変換することを「キャスト」という。
・キャスト演算子 () を使用して
この丸括弧の中には変換したいデータ型を記述。
② String型
❶String型⇒int型の変換
・Integer.parseInt(String型の変数)
❷String型⇒double型の変換
・Double.parseDouble(String型の変数)
❸数値(int/double)型⇒String型
・String.valueOf
(数値型の変数)
❶ キーボードからの1行入力
str = new java.util.Scanner(System.in).nextLine();
※ str は取得した 文字列を格納する String型の変数。
❷ 画面への表示
・System.out.println(表示したい内容);
・System.out.print(表示したい内容);
② エスケープシーケンス
・\(円マーク)の後に定められた文字を記述する事で
制御文字などの特別な文字を表現する方法。
今回も、ご覧いただき、ありがとうございます。