Part 02 Chapter 06(P.87)
数値データ同士は、データ型が違う変数を代入することも可能です
データ型が小さいintから大きなlongへの代入は普通にできる。
➜ datatype java Renshu_ori_3
10
10
逆に大きなlongから小さいintに代入するとコンパイルエラーになる。
➜ datatype javac Renshu_ori_3.java
Renshu_ori_3.java:4: エラー: 不適合な型: 精度が失われる可能性があるlongからintへの変換
int num = bignum;
^
エラー1個
longからintなど、大から小に代入する場合はデータが入りきらない可能性があるのでエラーになる。
大から小へ代入したい場合は、明示的にデータ型を変換する必要がる。この型変換をキャストという。
キャスト演算子
(<データ型>)<値>
➜ datatype java Renshu_ori_3
10
10
「代入しても問題ない」場合、または「入りきらない場合は捨ててよい」場合にキャストを使う
「捨ててよい」というのは少数を整数にに入れる場合に小数点以下を切り捨てるなど、精度が落ちてもいいような場合のこと。
違うデータ型はダメ
キャストできるのは数値型同士などに限る。(int型の変数をboolean型にキャストするということはできない)
ただしcharについては、用途は文字なのですが内部的には整数として扱われているので整数値とのキャストが可能。
➜ datatype java Renshu_ori_3
10
整数と少数の変換
整数から小数にはキャスト演算子なしで代入可能
➜ datatype java Renshu_ori_3
10.0
少数をキャストした場合、小数点以下は切り捨てられる
➜ datatype java Renshu_ori_3
1
doubleリテラル
float型(4バイト浮動小数)の変数に1.2など小数リテラルが代入できないのも、この大から小への型変換になるから。
fをつけない小数リテラルはdouble型と見なされるので、精度の大きいdoubleから小さいfloatにそのまま代入できないが、キャストすれば代入することは可能。
➜ datatype java Renshu_ori_3
1.2
ただし、コンパイルが通るという説明のためだけのコードで普通はこう書かない。普通は1.2fと書けばいい。
➜ datatype java Renshu_ori_3
1.2
➜ da
本日ここまで。
学習テキスト