数値を表す型では、ある型から別の型に値を代入することができます。その際には注意が必要です。
まずは、エラーが出る処理を示します。
short s = 1000; byte b = s; // ←エラーが出る
これは、16bitのサイズのshortから、8bitのサイズのbyteに、値を代入しようとしているためです。大きなサイズの型から、小さなサイズの型に値を代入すると、値の一部が失われる可能性があるのでエラーが出ます。
逆に、小さなサイズの型から、大きなサイズの型に値を代入するのは問題ありません。
byte b = 100; short s = b; // ←問題ない
大きなサイズの型から、小さなサイズの型に値を代入する際は「キャスト」という処理を行います。このキャストは「(変換する型)値」と書くことで行えます。
short s = 1000; byte b = (byte)s; // ←エラーにならない
ただし、この場合は注意が必要です。値の一部が失われる可能性があります。上記の場合は、内部的に以下のような処理が行われます。
10進数の「1000」は 2進数(short,16bit)では 「0000 0011 1110 1000」 ↓ byte は 8bit なので 末尾8bitだけコピーする「XXXX XXXX 1110 1000」 ↓ 「1110 1000」は byteでは「-24」
浮動小数点数のdouble(大きなサイズの型)からfloat(小さなサイズの型)に値を代入する際にもキャストが必要になります。この場合は64bitから32biteへの代入なので精度が落ちます。
double d = 1.0/3; System.out.println(d); // 「0.3333333333333333」と出力 float f = (float)d; System.out.println(f); // 「0.33333334」と出力
浮動小数点数から整数型へのキャストも行えます。その際は、小数点以下が切り捨てられます。
float f = 3.1415f; int i = (int)f; // 変数iには3が入る System.out.println(i); // 「3」と出力