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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么不能将包含int和long变量的算术表达式的结果分配回int变量?相关的知识,希望对你有一定的参考价值。

我知道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,仍会执行类型转换。超级基本的初学者问题,抱歉。

答案

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

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

另一答案

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

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

以上是关于为什么不能将包含int和long变量的算术表达式的结果分配回int变量?的主要内容,如果未能解决你的问题,请参考以下文章

Java LONG 整数类型

基本内置类型

java基本数据类型

int short long有啥区别?

java 大数运算[转]

Python的变量类型