簡體   English   中英

Java:將long轉換為int

[英]Java: Casting long to int

假設變量startstop都是長型變量。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM