Javaをはじめよう!第15回~縮小変換(byte,short型)~

2016/03/28

はじめに

前回はキャスト演算についてご紹介いたしました。

今回は縮小変換について詳しくご紹介いたします。

演算子

縮小変換(byte,shot型)

リテラル値にはbyteとshortに対応するデータ型がなく、byte型、short型のデータ範囲のリテラルであれば、自動的に小さい型に変換して変数に代入してくれる特別な型変換があります。その自動変換を縮小変換といいます。

浮動小数点では、上記の特別な縮小変換がないので注意が必要です。

Sample25.java

package chap02;

public class Sample25 {
	public static void main(String[]args){
		byte by = 127; //byte型127を初期化
		byte b  = 128;
		float f = 123.456;
	}
}

実行例

Exception in thread “main” java.lang.Error: Unresolved compilation problems:
型の不一致: int から byte には変換できません
型の不一致: double から float には変換できませんat chap02.Sample25.main(Sample25.java:6)

 

・5行目から6行目ではエラーが発生しましたが、4行目ではエラーが発生していません。
4行目ではbyte型のデータ範囲内なので縮小変換されています。5行目では、byte型のデータ範囲外なのでbyte型にint型を代入できませんというエラーが発生しています。

・6行目では、浮動小数点は暗黙的に縮小変換がおこなわれないので、double型をfloat型に代入できません。というエラーが発生しています。

先ほどのエラーを防ぐにはintからbyteにキャスト変換しなければいけませんが、float部分に関してはもう一つ方法があります。次にその例を、sample25.javaを少し変更して見てみましょう。

Sample25.java

package chap02;

public class Sample25 {
	public static void main(String[]args){
		byte by = 127; //byte型127を初期化
		//byte b  = 128; //byte型128を初期化
		float f = 123.456F;
	}
}

『F』は小文字でも構いません。float f = 123.456f;
このデータ型の明示方法は、long型,float型、double型の3種類だけ行うことができます。

それぞれ先頭の1文字を使って、『l』または『L』、『f』または『F』、『d』または『D』を数値の後ろに記述するだけです。(通例として大文字で記述します。)

int i =127L; 型をint型にいれられないというエラーが発生します。
double d = 123D; コンパイルが通り、123.0と表示されます。

ただし、キャストしているわけではないので
long l = 123.456L;  コンパイルエラーになります。

数値が後ろについているデータ型のデータの範囲内の場合だけ、自分の型を明示できるのです。

さいごに

今回は、縮小演算について詳しく紹介いたしました!

次回はchar型の変換規則について詳しく紹介いたします!

投稿者情報

パンダマン

パンダマン

パンダマンです。

主にWebシステム開発等を担当しております。
設計・プログラミング。サーバー管理なんでもやります。

今、担当しているプロジェクトではJavaの今まで触れたことのないフレームワークを使うことになり勉強中です。
学生にC言語のプログラミングの基礎を教えたりもしています。
最近「キングダム」にはまっています。

>> パンダマンが執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー