为什么不能将包含int和long变量的算术表达式的结果分配回int变量?

问题描述 投票:-2回答:2

我知道Java中的数字文字默认为int类型。所以下面例子中的5实际上是一个int,只要我不在它后面写一个'L'。那么为什么我不能将* b的结果分配给一个int变量,如果5和7都是int类型?

long a = 5;
int b = 7;
int c = a * b;

我不明白为什么Java在看到这样的东西时会遇到问题:

long a = 345236577970;

但如果表达式包含一个long变量,即使其类型实际上是int,仍会执行类型转换。超级基本的初学者问题,抱歉。

java casting integer int long-integer
2个回答
1
投票

你的推理是5和7(都是int)分配给变量,然后乘以变量,结果应该是int。这种推理的缺陷是你的代码不是乘以5和7,而是ab。一旦常量被赋给这些变量,它与常量的类型无关:唯一重要的是变量的类型。在这种情况下,类型是longint所以结果是long

转换为int的简单选项是强制转换或使用Math.toIntExact


0
投票

在计算完成之前,无法知道结果是什么(这看起来很明显但有时需要大声说出来)。这可能是一个结果可以适合int,但它可能不是 - 它可能是一个long。因此,语言旨在要求结果具有适合最大可能结果范围的类型。

如果你想把最终的结果反馈回int,你当然可以把它变成一个int变量,但你确实打开了结果可能不适合那里的风险。

© www.soinside.com 2019 - 2024. All rights reserved.