2016-04-12 6 views
0

xの値がlongの値なので、次のコードはコンパイルされません。したがって、2行目では、yに長い値を割り当てることはできません。接尾辞なしで長いと仮定される理由

long x = 10; 
int y = 2 * x; 

私の質問は次のとおりです。 最初の行は、型longの変数に接尾辞Lを持っていない、タイプintを持っていると仮定すべきではありませんか?

+1

「長い」に割り当てられると、長いです。 – Siguza

+0

[拡大プリミティブ変換](https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2) –

答えて

0

操作を実行する前に、intにキャストする必要があります。

long x = 10; 
int y = 2 * (int)x; 
0

あなたの操作の結果は、intでなければなりません。あなたが狭い変換o.k.aをしないならば。あなたの操作の任意のプリミティブ型のintへのキャスト操作であれば、操作の結果はより広い範囲番号になります。キャストすることで、結果がintの範囲内にあることを確信していることをコンパイラーに知らせるので、一見情報を失うことはないことがわかります(たとえキャストしていなくても、たとえば、それは完全に別の問題です)。質問hereに関する問題の優れた説明が見つかります。

関連する問題