将表达式转换为 long 似乎没有效果

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

我真的很难解决这个错误,而且我在互联网上找不到任何东西。 如果我这样做:

long test = (long) (2147483647 + 1);

它将

test
设置为 int,即使我使用了
long
。为什么?

我尝试使用 max int value 但它仍然不起作用。

long test = (long) (Integer.MAX_VALUE + 1);
java casting integer-overflow
2个回答
1
投票

投射然后添加

long test = (long) (2147483647) + 1;
System.out.println(test);

2147483648

否则你将添加两个整数然后进行转换


1
投票

长测试=(长)(2147483647+1);

我们来分析一下。

Java 按特定顺序计算表达式。首先在右侧表达式上计算加法。由于您没有显式定义“2147483647”的数据类型,因此java将其隐式保存为整数。与 1 相同。现在由于您要添加 int 数据类型变量,因此结果是 int。即-1。

这里的问题是java隐式计算数据类型。

在您知道我们需要更大的数据类型的情况下的解决方案。请明确告知java。

在这种情况下,我们可以通过如下的小改动轻松做到:-

长测试=(长)(2147483647L+ 1);

即使你不需要长时间投射。

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