【问题标题】:compound subtraction in Java with different datatypes [duplicate]Java中具有不同数据类型的复合减法[重复]
【发布时间】:2021-10-07 00:08:15
【问题描述】:

我对 Java 中的数据类型转换感到困惑。为什么这段代码有效:

long q = 5;
long r = 4;

int p = 0;
p -= q * r; 

而下面的代码给出了编译错误?

类型不匹配:无法从 long 转换为 int

long q = 5;
long r = 4;

int p = 0;
p = p - q*r;

与显式减法相比,Java 中如何处理显式减法?

【问题讨论】:

    标签: java integer long-integer


    【解决方案1】:

    p -= q * r 成功有两个原因:

    首先,q * r 是一个编译时间常数,已知在 int 范围内。

    其次,a += ba = a + b相同,与a = a + (int)b相同。

    结合这两个事实,编译器知道它可以安全地做什么。

    【讨论】:

    • 两个原因?你设法让它们都错了:1)q * r 不是编译时间常数,因为它们不是final。 --- 2) a += ba = (int) (a + b) 相同。不是a = a + (int)b。 --- 此外,这个问题在别处已经有很多答案了,所以不应该在这里回答。
    猜你喜欢
    • 2018-12-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多