System.out.println(2147483647 + 1); //prints -2147483648
我知道2147483647是整数数据类型的最大值。我的问题是为什么这个结果是针对 Integer 类型计算的,为什么不考虑 Long 或 double 类型?
因为...
System.out.println(127+1); //prints 128
这里为什么不考虑 127 作为 Byte 数据类型,导致结果为 -128?
最佳答案
从根本上来说,你似乎没有完全理解literals 。没有小数点或后缀的数字始终是 int
,无论其大小如何。 implicit widening 会使这变得更加复杂。当分配给更大的原始数据类型时(例如int
可能会隐式扩展为long
)。
现在我们知道你的两个文字是int
。 int
+ int
始终为 int
。结果是否溢出并不重要。
如果您知道或怀疑常量会超出int
的范围,请添加后缀L
(即2147483647L
和 1L
) 来显式声明这些是长整型。 long
+ long
= long
,因此在这种情况下结果不会溢出。
关于java - System.out.print() 中打印的常量的默认数据类型;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50737370/