x
の値がlong
の値なので、次のコードはコンパイルされません。したがって、2行目では、y
に長い値を割り当てることはできません。接尾辞なしで長いと仮定される理由
long x = 10;
int y = 2 * x;
私の質問は次のとおりです。 最初の行は、型long
の変数に接尾辞L
を持っていない、タイプint
を持っていると仮定すべきではありませんか?
x
の値がlong
の値なので、次のコードはコンパイルされません。したがって、2行目では、y
に長い値を割り当てることはできません。接尾辞なしで長いと仮定される理由
long x = 10;
int y = 2 * x;
私の質問は次のとおりです。 最初の行は、型long
の変数に接尾辞L
を持っていない、タイプint
を持っていると仮定すべきではありませんか?
操作を実行する前に、int
にキャストする必要があります。
long x = 10;
int y = 2 * (int)x;
あなたの操作の結果は、int
でなければなりません。あなたが狭い変換o.k.aをしないならば。あなたの操作の任意のプリミティブ型のintへのキャスト操作であれば、操作の結果はより広い範囲番号になります。キャストすることで、結果がintの範囲内にあることを確信していることをコンパイラーに知らせるので、一見情報を失うことはないことがわかります(たとえキャストしていなくても、たとえば、それは完全に別の問題です)。質問hereに関する問題の優れた説明が見つかります。
「長い」に割り当てられると、長いです。 – Siguza
[拡大プリミティブ変換](https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2) –