为什么不能将包含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,而是a
和b
。一旦常量被赋给这些变量,它与常量的类型无关:唯一重要的是变量的类型。在这种情况下,类型是long
和int
所以结果是long
。
转换为int的简单选项是强制转换或使用Math.toIntExact
另一答案
在计算完成之前,无法知道结果是什么(这看起来很明显但有时需要大声说出来)。这可能是一个结果可以适合int
,但它可能不是 - 它可能是一个long
。因此,语言旨在要求结果具有适合最大可能结果范围的类型。
如果你想把最终的结果反馈回int
,你当然可以把它变成一个int
变量,但你确实打开了结果可能不适合那里的风险。
以上是关于为什么不能将包含int和long变量的算术表达式的结果分配回int变量?的主要内容,如果未能解决你的问题,请参考以下文章