繁体   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