我們假設變量start
和stop
都是長型變量。Java:長時間投射到int
int diff = (int) start-stop;
此代碼產生了錯誤Type mismatch: cannot convert from long to int
,而
int diff = (int) (start-stop);
運行正常。爲什麼?
我們假設變量start
和stop
都是長型變量。Java:長時間投射到int
int diff = (int) start-stop;
此代碼產生了錯誤Type mismatch: cannot convert from long to int
,而
int diff = (int) (start-stop);
運行正常。爲什麼?
因爲在第一,(int)
適用於start
,不表達,如:
int diff = ((int) start) - stop; // <== Your first expression clarified
然後就從所得int
減去long
,而且表達的結果是一個long
。 (如果已經工作,它可能將不得不給予你一個不正確的結果,如果start
曾經有過大在int
存儲值的副作用。)
通過先做減法和獲得long
結果,然後將其轉換爲int
,您可以將其存儲在您的int
變量中。 (大概你知道它適合你的應用邏輯。)
因爲Java不允許隱含縮小轉換。一個將在第一種情況下是需要的,因爲它是等效於:
int diff = ((long)(int)start) - stop;
int diff = (int) start - stop;
等於
int diff = (int) (long) start - (long) stop; // we substract long types
可以簡化爲
int diff = (int) start - (long) stop; // (int)(long) x means (int) x
等於
int diff = ((int) start) - (long) stop; // casting is applied only to start
等於
int diff = ((long)(int) start) - (long) stop; // compiler make types equal
可以簡化爲
int diff = (long) start - (long) stop; // we can substract now
等於
int diff = (long) startMinusStop; // because long - long => long
在這裏我們是可讀的錯誤Type mismatch: cannot convert from long to int
。
非常好的分解 –
在您的第一個聲明中,您只會將變量start
轉換爲整數。所以結果是int - long
這是一個很長的,不適合整數。它會像int = (int - long)
和java不會允許。
第二種情況下,您將(啓動 - 停止)第一種情況的結果投入開始 –
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls- 15.7 –