[英]Java: Casting long to int
假設變量start
和stop
都是長型變量。
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
,這是一個long,不適合整數。
它就像int = (int - long)
而Java則不允許。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.