皆さんこんにちは。
Numata です。
今回はキャストを用いた型変換について解説します。
型変換とは何ぞや?という方から
「キャストしようとしたのに。結局できていない!!」という方や
「int型にキャストしたはずなのに少数が出てくる!!?」という方まで
たくさんいらっしゃると思います。
そんなあなたのキャスト事情を解決し、キャストマスターにします!
それでは始めましょう!
もくじ
キャストを使うためには、キャストしたい値を完成させましょう
型変換をするときには、あらかじめ変換したい値を完成させましょう
というお話です。
どういうことかを説明します。
以下例文です。
1 2 3 4 5 6 |
//合計金額と税額を足し算して、int型にキャストする int total = 1000; double tax = 0.1; int totalprice = 0; totalprice = (int) total + (total * tax); |
この例文だと、コンパイルエラーが発生します。
原因は、”変換したい値”が完成していない からです。
この例文における
”変換したい値”
とは、
”合計金額と消費税額の合計”
です。

つまり、
total と total * tax
の合計値です。
その理由はお分かりいただけますよね。
何かものを買うとき、お店に支払う金額は
商品価格+消費税 だからです。
例文のように、支払う金額の計算、出た値の型変換 を
1行の文で実行しようとすると
”変換したい値”が完成していない状況になることが多々あります。
”変換したい値”が完成していない ことがコンパイルエラーになる原因です!
キャストしたい値が完成していない状態ではだと、
上手にキャストできないことが多々あります。
キャストはほぼ最強です
では、なぜ”変換したい値”をあらかじめ完成させる必要があるのでしょうか。
その答えは、
キャストは強いから
です。
めちゃくちゃ強いです。
ここでいう強いは、計算順位のことを指します。
計算順位とは何でしょう。
おそらく小学校で習ったと思います。(記憶があいまいですが、、)
”×や÷” は ”+やー” より先に計算しましょう!
というルール。これのことです。
同一式の中に、様々な計算記号が混ざっていたら、
記号につけられている順位に従って計算しましょうというルールを
計算順位といいます。
Javaでも同様に演算子(計算記号)には、
計算順位が定められています。
基本的な記号は算数と変わりはありません。
(詳しくは別の記事を参照してみてください。)
その中で、Java特有の演算子もあります。(++や&&など)
今回扱う、キャストもJava特有の演算子の一種です。
そしてこのキャストは、めちゃめちゃ計算順位が高いです。
具体的には上から2番目で、カッコ()の次に計算順位が高いです。
これにより、上記例文では、totalを先にint型にキャストし、
それをtotal*taxの結果(double型)と計算しています。
結局右辺がdouble型になってしまい、
double型の数字をint型の変数に代入しようとしているため
コンパイルエラーが発生してしまうのです。
キャストの計算順位はカッコ()の次に高いです(2番目)
キャストはめちゃくちゃ強いです。

そのため、使い方には注意する必要があります。
使うときは、あらかじめ”変換したい値”を作成することを意識しましょう。
キャストは最強です。
隣に何か値を持ってくると、すぐに計算を実行しやがります。
であれば、隣に置く値は完成している必要があります。
先ほどの例文を改善するとこうなります。
1 2 3 4 5 6 7 |
//合計金額と税額を足し算して、int型にキャストする int total = 1000; double tax = 0.1; int totalprice = 0; //先に税込み価格を計算してから、int型にキャストする totalprice = (int) (total + (total * tax)); |
キャストもカッコ()にだけはかないません。
Javaの計算式において、カッコ()は計算順位が一番高いです。
税込み価格の計算式をカッコで括ることで、
キャストより前に計算することができます。
こうして、あらかじめ”変換したい値”を作成し、それをキャストの隣に
配置することで、確実に型変換を行うことができます!
型変換したければ、あらかじめ変換したい値を完成させましょう
他にも様々な方法がありますが、
最初のほうは、先に型変換させたい値を作ることを意識しましょう。
最初のうちは、キャストする用の変数を作ってもよいかもしれません。
1 2 3 4 5 6 7 8 |
//合計金額と税額を足し算した結果をdに入れ、dをint型にキャストする int total = 1000; double tax = 0.1; int totalprice = 0; double d = 0; d = total + (total * tax); totalprice = (int)d; |
大切なことは
”型変換する値をあらかじめ作成すること”
です。
キャストの計算順位を意識して、プログラムを作成しましょう!!
コメント