Bahna:
配列を作成している間、私たちは渡すことができますshort
、char
、byte
、int
。だから、[理由]はint[] a = new int['a']
有効?これは、コンパイル時にエラーになりません。
この形式の配列宣言は何を意味するのでしょうか?
アンディ・ターナー:
DimExpr内の各次元表現のタイプは、一体型に変換(5.1.8)であるタイプ、またはエラーが発生するコンパイル時でなければなりません。
各次元式は、単項数値昇格(5.6.1)を受けます。昇格型はintでなければならない、またはコンパイル時エラーが発生します。
以下とからJLS秒5.6.1:
オペランドがコンパイル時の型バイト、ショート、キャラクター、又は整数である場合、それがアンボクシング変換(5.1.8)に供されます。結果は、拡大プリミティブ変換(5.1.2)又は恒等変換(5.1.1)によって、int型の値に昇格されます。
そして
オペランドがコンパイル時の型バイト、短い、またはcharである場合にそうでなければ、それは拡大プリミティブ変換(5.1.2)によって、int型の値に昇格されます。
だから、のいずれかのByte
、Short
、Character
、Integer
、byte
、short
、char
またはint
許容されています。
従って'a'
、チャーリテラルは、許可され、そしてに促進されるint
値97。