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
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法