0

This was a stupid question. I was still learning and was drastically overthinking the situation.


In the source code for Integer, it shows MIN_VALUE and MAX_VALUE declared as:

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

My question is, how do these ints get declared in the first place? It seems as though these values would have to be known in order for the values to be validated (or overflow, or whatever) to begin with. It obviously can't check itself before it's declared, so how does this work?

4

3 に答える 3

5

そもそもこれらの int はどのように宣言されるのでしょうか?

それらが宣言されている2行を表示しています...

値を検証するには、これらの値を知る必要があるようです

これらの定数は既知であり、これらはその値です。

つまり、int値の制限は、32 ビットに収まらなければならないという事実によって制約されます。これら 2 つの変数は便宜上存在しますが、intオーバーフローするかどうかを判断するためには使用されません。

int値の範囲はJava 言語仕様 #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 に答える