我编译了以下代码,
import java.lang.*;
public class Test
{
public static void main(String[] args)
{
int x=010;
System.out.println("x(010):="+x);
}
}
编译代码后,我得到了值8,但x的实际值是10,如何打印值8,请问有人解释原因。
答案 0 :(得分:4)
它以0开头,所以它是八进制表示法。
实际上,x
的值为1*8^1 + 0*8^0 = 8
。
正如JLS所述:
八进制数字由ASCII数字0后跟一个或多个组成 ASCII数字0到7
OctalNumeral:
0 OctalDigits
答案 1 :(得分:1)
int x = 010
x
的值中的前缀“0”使编译器将其视为八进制值。
答案 2 :(得分:1)
在java中,如果你从0开始,那么你就知道这个数字是八进制的。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1
八进制数字由ASCII数字0后跟一个或多个以下划线散布的ASCII数字0到7组成,并且可以表示正整数,零或负整数。