4

重複の可能性:
09 は認識されませんが、9 は認識されます

不思議に思うのは、次のように宣言するときです。

public static final long __VERSIONCODE = 0L;
public static final long __VERSIONCODE = 9L;

それはうまくいきますが、これを試すたびに:

public static final long __VERSIONCODE = 09L;
public static final long __VERSIONCODE = 08235L;

エラーが発生します(Eclipseで):

「long 型のリテラル 09L は範囲外です。」

だから、それはゼロから始まったからだと思いました。

しかし、その後、2桁目を8として試しました:

public static final long __VERSIONCODE = 07235L;

エラーは発生しません。

それから:

public static final long __VERSIONCODE = 07239L;

私にもエラーが発生します。

そのため、どの値を long に割り当てることができ、どの値を割り当てることができないのか、本当にわかりません。このエラーが発生するのはなぜですか? (実際には、私が興味を持っているだけです。バージョン コードに文字列を使用することもできます)。

また、long の代わりに double を使用してもまったく同じように動作することを忘れていました。

4

2 に答える 2

17

整数型リテラルの前に 0 を付けると、8 進数を表していると解釈されます。「9」は 8 進数の有効な数字ではないため、これが原因である可能性があります。「010L」の (10 進数) 値を出力してみて、「8」と表示されているかどうかを確認してください。

注: Java がこれを行うのか、それとも純粋に Eclipse の成果物なのかは不明です。後者の場合、010L を出力すると 10 が表示されます。前者の場合、8 が表示されます。Eclipse の単なる成果物である場合は、01L、02L、...、07L を試すことで確認できます。失敗する08Lと09L。

于 2013-01-28T16:55:30.590 に答える
4

定数に先行ゼロを使用することは、0..7 の数字のみが許可される 8 進数表記を示しています。したがって、数値をきれいに印刷するために先行ゼロを使用する場合、それが表す値が異なるため、それは悪い考えです。

http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html#3.10.1を参照し、「8 進数」に注意してください。

于 2013-01-28T17:00:06.237 に答える