java - 为什么 Java 不像检查 int 那样检查 byte 的类型兼容性?

标签 java for-loop integer byte primitive

我正在尝试使用 byte 作为 for 循环中的控制循环变量。 我将条件用作 n < 128(其中 128 超出字节范围)

for (byte n =0; n < 128 ; n++) System.out.println("I am in For loop. "+ n ); 

循环无限地从 0 到 127,然后从 -128 到 127。

当我尝试对 int 做同样的事情时,它给出了一个错误。

for (int n = 0; n < 2147483648; n++)

int类型的字面量2147483648超出范围

为什么 Java 不像检查 int 那样检查 byte 的类型兼容性?

最佳答案

不根据循环变量的类型检查类型兼容性。

没有后缀的整数字面量的类型总是int128 是一个有效的 int,因此第一个循环通过了编译,但导致数值溢出,从而导致无限循环。

另一方面,2147483648 不是有效的 int,因此第二个循环没有通过编译。如果将 2147483648 替换为 long 文字 (2147483648L),第二个循环也会通过编译。

关于java - 为什么 Java 不像检查 int 那样检查 byte 的类型兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46764385/

相关文章:

Java:删除第三个斜杠之前的所有内容

java - 升级应用程序以在 Java 中使用泛型有哪些注意事项?

java - 我可以通过基类类型的引用访问子类方法吗?

matlab - 在 MATLAB 中计算整数向量的方差

c++ - 为什么固定宽度的整数打印出字符而不是整数?

cocoa - 整数ForKey : always returns zero

java - 如何将 BigInteger 转换为科学计数法字符串并返回?

javascript - 将 PHP 数组传递给 JavaScript 对象数组

javascript - 一行数组迭代器javascript

java - 有人可以帮我理解这个 for 循环吗?