データ型は、暗黙的(自動型変換)および明示的な変換(キャスト)は、2つに変換されます。
暗黙的な変換(自動変換)
2つの条件が満たされたとき、そのデータの種類は、変数の別のタイプ、自動的に実行される変換の種類(自動型変換)に割り当てられています。
两种数据类型彼此兼容
目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
上記2つの条件が満たされた場合、自動変換(拡大変換)が起こります。例えば、短距離の大型種に起因するバイト型ショートを変換するために、自動的にバイトshort型に変換されます。
動作中に、異なるタイプのデータのためには、同じデータ型に変換され、整数、浮動小数点および文字は、混合操作に参加することができます。自動変換ルールは、ハイレベルのデータ・タイプからデータの低レベルの型に変換されます。次のように変換規則は、次のとおりです。
数值型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
左から右への変換シーケンスに従う上記のデータ型は、最終的な発現が最大の可変範囲のデータ型を示すに変換されます。
自動型変換の例
歯磨き粉2箱を購入するスーパーマーケットで買い物客、クリネックスの4箱。これで価格は10.9元の歯磨き粉で、クリネックス価格は5.8元、コモディティ需要の合計金額です。
実現
public static void main(String[] args) {
float price1 = 10.9f; // 定义牙膏的价格
double price2 = 5.8; // 定义面巾纸的价格
int num1 = 2; // 定义牙膏的数量
int num2 = 4; // 定义面巾纸的数量
double res = price1 * num1 + price2 * num2; // 计算总价
System.out.println("一共付给收银员" + res + "元"); // 输出总价
}
上記のコードは最初の価格変数記憶歯磨き粉フロートタイプを定義し、次にダブルクリネックス可変貯蔵タイプの価格を定義し、アイテムを格納するint型の二つの変数の数、及び最終的に乗算演算を定義しその後、出力結果がdouble型の変数に格納されています。
出力
一共付给收银员44.999923706055元
実行結果、フロート、int型、および操作に関係するデータの二重の3種類から見ると、結果がdouble型の最終的な出力データです。この変換は、一般的と呼ばれている「自動アップグレードのタイプの表現。」
例えば、ディスプレイを使用してキャスト:
byte b = 50;
b = (byte)(b*2);
これは100の正しい値を生成します。
ご注意ください:シャア特殊なタイプ、CHAR自動的に変換されたint型、長い、フロート、ダブル、しかし自動的に変換しないバイト、および文字の短いが、自動的に短いchar型のバイトまたはに変換することはできません。
明示的な変換(キャスト)
自動型変換は便利ですが、プログラミングのニーズのすべてを満たしていませんが。あなたはint型の変数にdouble型の値を必要とする場合たとえば、あなたはどのように行うのでしょうか?
double型の範囲の変更のがintよりも小さいので、この変換は、自動的には行われません。この変換は、「狭く変換」を作るために持っているあなたは確かに、ソース・データ・タイプの値にしたいので、ターゲット・データ・タイプを合わせるために小さくなる。
2つのデータ型に互換性がない、以下のソース・タイプのターゲットタイプよりも範囲で、それは自動的に変換することができない場合、それらはキャストする必要があり。構文は次のとおりです。
(type)variableName
ここで、variableNameには、変数名のデータ型に変換すると入力すると、単により多くvariableNameに型変換され、キャストの例は次のとおりです。
int a = 3;
double b = 9.0;
a = (int)b;
int型に、上述した第一のコード型変数bキャスト重複値、その後、b値の値を割り当てるが、変数自体は変更されません。
キャストでは、値が整数に変換された場合に浮動小数点型は、小数点は、直接すべての後ろを削除し、そしてそれはフローティングタイプのキャストの整数、小数点の後にゼロパディングがある場合。
キャストの例の
歯磨き粉2箱を購入するスーパーマーケットで買い物を顧客、クリネックスの4箱。歯磨き粉は、10.9元の価格5.8元顔面組織の価格であり、合計金額の計算に格納されているINTデータを用いて、商品の合計金額を見つけます。次のようにコードは次のとおりです。
public static void main(String[] args) {
float price1 = 10.9f;
double price2 = 5.8;
int num1 = 2;
int num2 = 4;
int res2 = (int) (price1 * num1 + price2 * num2);
System.out.println("一共付给收银员" + res2 + "元");
}
上記の例では、コンピューティングに関与するdouble型、float型、およびデータ型intがあり、計算は、二重被写体のint型の要件の結果をデフォルトのタイプをもたらすために、ダブルタイプの範囲よりも小さい範囲のint 、強制転換の必要性そう。
出力
一共付给收银员44元