変換及び昇格Java言語で記述されたすべての式は,その式の構造,並びに,その式の中に記述された,リテラル,変数及びメソッドの型から演繹できる型をもつ。式の型が適切でない式を書いてしまうこともできるので,コンパイル時にエラーとなる場合もある。以外の型をもてば,コンパイル時エラーが発生する。文脈によっては,式の型が受理可能な場合もある。もつかのようにコンパイル時に扱うことができる。とって適切な形式に翻訳する実行時動作が,必要となる場合もある。型Objectから型Threadへの変換は,実行時の値が実際にクラスThread又はその下位クラスのインスタンスであることを確認するための実行時検査を要求する。ないときには例外が投げられる。型Threadから型Objectへの変換は,実行時動作を要求しない。ThreadはObjectの下位クラスなので,型Threadの式が生成するいかなる参照も型Objectの正当な参照値となる。型intから型longへの変換は,32ビット整数値の64ビットlong表現への実行時符号拡張を要求する。いかなる情報も失われない。型doubleから型longへの変換は,64ビット浮動小数点の値から64ビット整数表現への自明でない翻訳を要求する。実際の実行時の値によっては,情報が失われることがある。すべての変換の文脈で,決められた特定の変換だけが許される。Javaプログラム言語で可能な特定の変換を,記述の便宜を図るために,次の大分類に類別する。個々の文脈で,可能な変換を定めた。いう用語は,文脈に対して特定の変換を選択する過程を記述するためにも使用する。従う,というが,これはメソッド呼出し実引数の文脈に対する規則によって,その式に合った特定の変換を暗黙的に選択することを意味する。変換文脈の中には,+,*などの数値演算子のオペランドとなる数値がある。二項演算子の場合は,一方のオペランドに対する変換の選択が,他方のオペランド式の型に部分的に依存する可能性がある。5.では,最初に,文字列の連結演算子+に対して許されるStringへの特殊な変換を含む,変換の七つの大分類(5.1)を規定する。次に,五つの変換文脈を規定する。代入変換(5.2,15.26)は,式の型を,指定した変数の型に変換する。代入に許される変換は,代入変換が決して例外を引き起こさない,という制約をもつ。メソッド呼出し変換(5.3,15.9,15.12)は,メソッド呼出し又はコンストラクタ呼出しにおける各実引数に対して適用され,一つの場合を除いて代入変換と同じ変換を実行する。メソッド呼出し変換は,決して例外を引き起こさない。キャスト変換(5.5)は,式の型をキャスト演算子(15.16)が明示的に指定する型へ変換する。キャスト変換では,文字列変換以外のいかなる変換も可能なので,代入変換又はメソッド呼出し変換よりも包括的だが,参照型へのキャストは,実行時に例外を引き起こす可能性をもつ。文字列変換(5.4,15.18.1)は,いかなる型も型Stringへと変換可能とする。数値昇格(5.6)は,数値演算子のオペランドを共通の型にし,演算を実行可能とする。変換に対する種々の文脈の例を次に示す。d);}}これは,次の出力を生成する。変換の種別Javaプログラム言語における型変換を,次の七つに大分類する。恒等変換ある型からそれと同じ型への変換は,いかなる型に対しても許される。これは,二つの実用的な効果をもつ。第一に,すべての式は変換を受ける,と規則を簡潔に言明できる。第二に,明確化のために,プログラムが冗長なキャスト演算子を含むことを許可する。型booleanを含む唯一許される変換は,booleanからbooleanへの恒等変換とする。byteからshort,int,long,float,又はdoubleへの変換。shortからint,long,float,又はdoubleへの変換。charからint,long,float,又はdoubleへの変換。intからlong,float,又はdoubleへの変換。longからfloat又はdoubleへの変換。floatからdoubleへの変換。プリミティブ型の拡大変換は,数値の大きさについての情報を失わない。実際,整数の型から他の整数の型への拡大変換及び型floatから型doubleへの拡大変換は,いかなる情報も失うことはない。数値を正確に保存する。strictfp式での型floatから型doubleへの拡大変換も,数値を正確に保存する。strictfpでない変換は,変換後の数値の大きさについての情報を失うかもしれない。precision),すなわち値の最小位の数ビットを失うことがある。754直近へのまるめモード(4.2.4)を利用して,正しく丸めた整数値とする。拡大変換は,単により長い桁を埋めるために整数値の2の補数表現について符号拡張をするだけとする。拡大変換は,より長い桁を埋めるために文字値の表現をゼロ拡張する。精度の損失が発生する可能性があるという事実にもかかわらず,プリミティブ型間の拡大変換は,実行時例外(11.)を生じない。精度を失う拡大変換の例を次に示す。(int)approx);}}これは,次を印字する。-46この例は,型intから型floatに変換する過程で,型floatの値が9桁の有効数字の精度がないために,情報が失われたことを示している。byteからcharへの変換。shortからbyte又はcharへの変換。charからbyte又はshortへの変換。intからbyte,short又はcharへの変換。longからbyte,short,char又はintへの変換。floatからbyte,short,char,int又はlongへの変換。doubleからbyte,short,char,int,long又はfloatへの変換。縮小変換は,数値の大きさの情報を失うことがあり,さらに精度を失うこともある。縮小変換は,単に下位nビット以外のすべての情報を捨てる。表現するのに使用するビット数とする。数値の大きさに関する情報の損失の可能性に加えて,結果値の符号が,入力値の符号と異なってしまうことがある。縮小変換は,単に下位nビット以外のすべての情報を捨てる。表現するのに使用するビット数とする。数値の大きさに関する情報の損失の可能性に加えて,文字が16ビットの符号なし整数値を表わすにもかかわらず,結果値が,負の数になることがある。縮小変換は,二つの段階を踏む。byte,short,char又はintならばintに変換する。浮動小数点数がNaN(4.2.3)ならば,変換の第一段階の結果は,int又はlongの0とする。