[英]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.