这是一个愚蠢的问题。我还在学习,并且彻底地过度思考这种情况。
在Integer
的源代码中,它显示MIN_VALUE
和MAX_VALUE
声明为:
public static final int MIN_VALUE = 0x80000000;
public static final int MAX_VALUE = 0x7fffffff;
我的问题是,这些int
如何首先被声明?似乎必须知道这些值才能使值开始验证(或溢出或其他)。它显然无法在声明之前自行检查,所以它是如何工作的?
答案 0 :(得分:5)
如何首先声明这些整数?
您正在显示声明它们的两行......
似乎必须知道这些值才能验证值
这些常数是已知的,这些是它们的值。
换句话说,int
值的限制受限于它们必须适合32位的事实。这两个变量是方便的,但不用于确定int
是否应该溢出。
int
中定义{{1}}值的范围 - 这些常量仅反映规范:
整数类型的值是以下范围内的整数:
- [...]
- 对于int,从-2147483648到2147483647,包括
答案 1 :(得分:2)
编译阶段的验证/可能的溢出检查由编译器完成,编译器可能(并且可能具有)硬编码的那些已知值。
换句话说,编译器不需要查看MIN_VALUE或MAX_VALUE来验证程序,这些值只是作为任何常量处理,并且可以将编译器定义为任何值。当然,如果他们被改变了,那么你真正关心常数的程序可能也不会发生变化。
答案 2 :(得分:-1)
在Java中,整数是32位长。根据定义,值0x07ffffff
和0x08000000
是最大和最小可能值。