Java - Primitive Type Casting(キャスト)

Javaは、以下の二つのタイプをサポートします。

  • Primitive type
  • Reference type

Primitive typeはintなどのJavaで基本的に提供してくれるタイプを指します。このようなタイプのは、クラスではなく、相続で再加工が不可能なタイプです。 Reference typeはクラスで作成されたオブジェクトを意味します。

ここPrimitive typeのCasting(キャスト)について説明します。

Primitive type

Javaは、次のようなPrimitive typeをサポートします。

  • byte: 8bit, signed
  • short: 16bit, signed
  • int: 32bit, signed
  • long: 64bit, signed
  • float: 32bit, signed
  • double: 64bit, signed
  • boolean: true or false
  • char: 16bit, unsigned

Type casting(キャスト)

上記のPrimitive typeで紹介したように、それぞれのTypeは表現することができるデータのサイズが異なります。

したがって、異なるTypeの変数を割り当てるには、Type castingをする必要があります。 そしてType castingをするとき、場合によってデータが失われることもあり、失われないことがあります。

より大きなタイプにキャスト

次のように、より大きな範囲のタイプに変換する場合は、データは失われません。 longよりfloatまたは doubleが、より大きな範囲のデータを格納するため、データは失われません。 このような場合、以下のように単に割り当てます。

long longNum = 10;

float floatNum = longNum;
double doubleNum = longNum;

System.out.println("floatNum: " + floatNum);
System.out.println("doubleNum: " + doubleNum);

実行結果を見ると、誤って表現されるが、元のデータである 10は保存されます。

floatNum: 10.0
doubleNum: 10.0

より小さい型にキャストし

次のような小さい範囲のタイプに変換する場合、データは失われる可能性があります。 floatの少数はintで表現することができないため、変換中に失われます。 このような小さな範囲にキャストするときに (long)のように変換するタイプを入力する必要があります。そうでなければ、コンパイルエラーが発生します。

float floatNum = 10.1f;
long longNum = (long) floatNum;
int intNum = (int) floatNum;

System.out.println("longNum: " + longNum);
System.out.println("intNum: " + intNum);

結果を見ると、整数部分だけ変換がされた。その他の間違いの部分は表現できないので、残っていた。

longNum: 10
intNum: 10

Boxing, Unboxing

JavaはPrimitive typeのデータを内部に持っているWrapper classを提供します。

  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Boolean

Primitive typeのオブジェクトは、Reference typeのオブジェクトがないので、Genericクラスを作成するときにPrimitive typeを使用していないことがあります。 このような問題を解決するためにWrapper classを提供します。このクラスは、Objectを継承するクラスです。

WrapperクラスとPrimitive typeは以下のように簡単に相互に変換することができます。 このようなことをBoxing、Unboxing呼ばれます。

int intNum = 10;

Integer integerReference = intNum;

int myIntNum = integerReference;

String変換

Wrapper classは parseInt()のように文字列を解析してPrimitive typeに変換するメソッドを提供します。

int intNum = Integer.parseInt("1234");
long longNum = Long.parseLong("12345");

float floatNum = Float.parseFloat("1234.5678");
double doubleNum = Double.parseDouble("1234.5678");

boolean booleanType= Boolean.parseBoolean("false");

System.out.println("intNum: " + intNum);
System.out.println("longNum: " + longNum);
System.out.println("floatNum: " + floatNum);
System.out.println("doubleNum: " + doubleNum);
System.out.println("booleanType: " + booleanType);

次のように変換されます。

intNum: 1234
longNum: 12345
floatNum: 1234.5677
doubleNum: 1234.5678
booleanType: false

Primitive typeをStringに変換

Wrapperクラスは次のようにPrimitive typeをStringに変換するメソッドを提供します。

int intNum = 1234;
float floatNum = 1234.5678f;

String intStr = Integer.toString(intNum);
String floatStr = Float.toString(floatNum);

System.out.println("intStr: " + intStr);
System.out.println("floatStr: " + floatStr);

Output:

intStr: 1234
floatStr: 1234.5677

WrapperをStringに変換

次のようにWrapper objectをStringに変換することもできます。

Integer intNum = 1234;
Float floatNum = 1234.5678f;

System.out.println("intStr: " + intNum.toString());
System.out.println("floatStr: " + floatNum.toString());

Output:

intStr: 1234
floatStr: 1234.5677

Related Posts

codechachaCopyright ©2019 codechacha