长值,左边为0

And*_*oni 2 java octal long-integer

为什么会出现这种情况

long value = 123450;
System.out.println("value: " + value); 
Run Code Online (Sandbox Code Playgroud)

价值:123450

 

long value = 0123450;
//           ^
System.out.println("value: " + value); 
Run Code Online (Sandbox Code Playgroud)

价值:42792

这是什么42792?

aio*_*obe 7

为什么会出现这种情况

正如从开头的文字0x被视为十六进制数字(基数16),以a开头的文字0被视为八进制数字,即基数为8的数字.

(尝试编写0789,你会发现编译器会抱怨.)

这是什么42792?

基数8中的数字123450表示数字

1 ×8 5 + 2 ×8 4 + 3 ×8 3 + 4 ×8 2 + 5 ×8 1 + 0 ×8 0 = 42792


Al-*_*zmi 5

如果在数字前加零,则应理解为八进制(基数为8).但是,println将其写入基数10.

123450八进制= 42792十进制.


Alf*_*rio 5

这就是java代表八进制文字的方式.看看这个:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

如果你想要的是在左边打印带零的东西你需要使用DecimalFormat格式方法.

http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

在这种情况下,你这样做:

long value = 123450;
DecimalFormat df = new DecimalFormat("0");
System.out.println("value: " + df.format(value)); 
Run Code Online (Sandbox Code Playgroud)