0

这是一个愚蠢的问题。我仍在学习,并且严重地过度考虑了这种情况。


在 的源代码中Integer,它显示MIN_VALUEMAX_VALUE声明为:

public static final int MIN_VALUE = 0x80000000;  
public static final int MAX_VALUE = 0x7fffffff;

int我的问题是,这些s 首先是如何声明的?似乎必须知道这些值才能开始验证(或溢出或其他)值。它显然不能在声明之前检查自己,那么这是如何工作的呢?

4

3 回答 3

5

首先如何声明这些整数?

您正在显示声明它们的两行...

似乎必须知道这些值才能验证这些值

这些常数是已知的,这些是它们的值。

换句话说,一个int值的限制受到它们必须适合 32 位这一事实的约束。这两个变量是为了方便而存在的,但不用于确定是否int应该溢出。

值的范围intJava 语言规范 #4.2.1中定义- 这些常量仅反映规范:

整数类型的值是以下范围内的整数:

  • [...]
  • 对于 int,从 -2147483648 到 2147483647,包括
于 2012-10-02T21:34:47.443 回答
2

编译阶段的验证/可能的溢出检查由编译器完成,它可能具有(并且可能具有)硬编码的那些已知值。

换句话说,编译器不需要查看 MIN_VALUE 或 MAX_VALUE 来验证程序,这些值只是被视为任何常量,并且就编译器而言可以定义为任何值。当然,如果它们被更改,那么真正关心常量的程序可能也不会运行良好。

于 2012-10-02T21:29:01.707 回答
-1

在 Java 中,整数是 32 位长的。根据定义,值0x07ffffff0x08000000是可能的最大值和最小值。

于 2012-10-02T21:29:28.240 回答