我编了下面的代码,如何价值的变化动态
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,你能请别人向我解释原因吗?
我编了下面的代码,如何价值的变化动态
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开头,所以它是八进制表示法。其实x
的值为1*8^1 + 0*8^0 = 8
。
作为JLS状态:
八进制标记由一个ASCII数字0,接着的ASCII数字0的一个或多个 至7
OctalNumeral:
0 OctalDigits
感谢您的回答。 –
int x = 010
前缀“ 0“的值为x
使得编译器将其视为八进制值。
在java中,如果你从0开始,那么你说的是数字是八进制数。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1
八进制标记由一个ASCII数字0,随后的一个或多个的ASCII数字0到7用下划线穿插的,并且可以代表正,零或负的整数。
请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1 - 编译器正在按照它的意思去做...... –