Java中具有不同数据类型的复合减法[重复]

Posted

技术标签:

【中文标题】Java中具有不同数据类型的复合减法[重复]【英文标题】:compound subtraction in Java with different datatypes [duplicate] 【发布时间】: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 中如何处理显式减法?

【问题讨论】:

【参考方案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。 --- 此外,这个问题在别处已经有很多答案了,所以不应该在这里回答。

以上是关于Java中具有不同数据类型的复合减法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

简述集合框架和数组的区别

GO语言编程基础-复合类型结构体

java中int 和 Integer 有啥区别

整数类型的输入语法无效:执行函数时具有复合数据类型的“(2,2)”

Java中equals和==的区别

== 和 equals 的区别是什么?