3

先行ゼロの長い変数の場合、なぜそのような出力になるのか理解できません。

public class Test{
        public static void main(String[] args) {
             long var1=00123l;
             long var2=123l;
             System.out.println("Variable 1--->"+var1);
             System.out.println("Variable 2--->"+var2);
             System.out.println(var1==var2);
        }
    }

出力:

Variable 1--->83
Variable 2--->123
false
4

5 に答える 5

7

リテラルの前に0が付いている場合。javaはそれを8進数として扱います。同じ番号を印刷すると、デフォルトではbase(10)形式で印刷されます。したがって00123l、として出力され83ます。

于 2012-12-17T10:07:08.107 に答える
7

先行ゼロは8進リテラルに変わり、00123l123 8 = 8310

JLSから:

8進数は、ASCII数字0と、それに続く1つ以上のASCII数字0から7で構成され、アンダースコアが点在し、正、ゼロ、または負の整数を表すことができます。

値を出力すると、10進数で出力されるため、が表示されます83

于 2012-12-17T10:07:17.503 に答える
4

値に先行ゼロを追加すると、8進数値として解釈されます。

整数は先行ゼロを格納できません。それらが必要な場合は、番号を文字列として保存します。

于 2012-12-17T10:07:56.177 に答える
2

先行ゼロを含む整数リテラルを作成すると、8進数として解釈されます。001238進数は8310進数です。

于 2012-12-17T10:08:21.370 に答える
0

00123または0123または0123lすべてがJavaで同じです。テストできます。それらは8進数です。それらを変換すると、が見つかります(1X8^2)+(1X8^1)(1X8^0)=64+16+3=83。必要に応じて、文字列として保存できます。

于 2012-12-17T10:39:12.663 に答える