java - 为什么在下面的代码中,长类型变量在转换之后和转换之前给出不同的答案,因为两者都是长类型?

标签 java casting

byte byteChallenge = 68;
short shortChallenge = 190;
int intChallenge = 2147483647;

long longChallenge = (50000L + 10L * (byteChallenge + shortChallenge + intChallenge));

long longChallengeX = 50000L + 10L * ((long) byteChallenge + (long) shortChallenge + (long) 
                          intChallenge);

System.out.println(longChallenge);
System.out.println(longChallengeX);

我得到的输出是:

-21474783910
21474889050

最佳答案

棘手的部分是 int intChallenge = 2147483647 常量,它是正 int 的最大值(请参阅 Integer.MAX_VALUE)。

当您执行byteChallenge + ShortChallenge + intChallenge时,它是一个int算术语句,结果为integer overflow 。在您的示例中,整数溢出结果是负数。

当您执行(long)byteChallenge +(long)shortChallenge +(long)intChallenge时,它是long算术。由于 long 支持比 int 大得多的值,因此不会溢出。

关于java - 为什么在下面的代码中,长类型变量在转换之后和转换之前给出不同的答案,因为两者都是长类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60326291/

相关文章:

java - 在 java J2ME 中使用 new 运算符和不使用 new 运算符分配的字符串有什么区别?

java - jlink:应用程序 jar 未在/bin 文件夹中创建

java - 将库从 org.json 更改为 Jackson 以解析 JSON

c++ - 将 8 个 uint8_t 组合成一个 uintmax_t 的最快方法是什么?

c++ - 将指针转换为 int/将指针存储为类型 T

c++ - 不寻常的编译器错误转换为无效?

java - 关于在java opencv中使用霍夫圆检测虹膜和瞳孔圆

java - 有没有办法在Java中记录失败的Oracle登录名的用户名?

java - 使用 Stream API 进行转换

C++:将容器转换为不同但兼容类型的容器