0

javac がこの定数式をどのように計算するのだろうか?

class Test {
   public static final int NaN = 0 / 0;
...
4

2 に答える 2

3

Java 言語仕様、§15.17.2で定義されています。

この規則を満たさない特殊なケースが 1 つあります。被除数がその型で可能な最大の大きさの負の整数で、除数が -1 の場合、整数オーバーフローが発生し、結果は被除数と等しくなります。この場合、オーバーフローがあっても例外はスローされません。一方、整数除算の除数の値が 0 の場合は、anArithmeticExceptionがスローされます。

つまり、被除数が 0 の場合、除数が何であっても問題ありません。あっさり投げますArithmeticException

ここで、doublesを使用していた場合、 JLS §15.17.2NaNによって返されます。

于 2012-12-16T07:15:19.173 に答える
0

Java の整数プリミティブ型には、'NaN' または 'Inf' 値の表現がありません。(または、他のほとんどの言語で。)

実際に何が起こるかというと、ArithmeticException実行時に an がスローされます。

この式はクラスの静的初期化で評価されるため、初期化クラスは失敗し、それに依存する他のクラスも初期化に失敗します。アプリケーションがメソッドの最初のステートメントにさえ到達しない可能性が十分にありますmain

于 2012-12-16T07:23:17.010 に答える