他们认为是:
但是,如果你检查Integer with leading zeroes那么你会发现问题是在jdk7发布之前是否因为它的研究工作较少而被问到。但是在jdk7中,整数有一些变化和补充。以下是涵盖jdk7的最新答案。
我有一个代码:
class Test{
public static void main(String[] args){
int x=09;
System.out.println(x);
}
}
编译时会出错:整数过大:09
为什么会这样做?
同样,如果我将代码更改为:
class Test{
public static void main(String[] args){
int x=012;
System.out.println(x);
}
}
现在输出为10
为什么输出10而不是12?
答案 0 :(得分:43)
以0
开头的数字被视为octal - 9不是八进制数字(但是(传统上)0-7是)。
十六进制文字以0x
开头,例如0xA
。
直到Java 6,二进制文件没有文字表示法 你必须使用像
这样的东西int a = Integer.parseInt("1011011", 2);
其中第二个参数指定了所需的基数。
Java 7现在有binary literals。
在Java SE 7中,也可以使用二进制数系统表示整数类型(byte,short,int和long)。要指定二进制文字,请在数字中添加前缀
0b
或0B
。
答案 1 :(得分:19)
以“0”开头的整数文字被视为八进制。允许的数字是0到7.
答案 2 :(得分:13)
以数字0开头的整数是八进制(基数为8)的数字。最大的八进制数字是7; 07之后是010(等于小数8!)
012(八进制十二)是010(八进制十,即十进制8)加2或十进制10.
答案 3 :(得分:8)
09是一个八进制数字文字,但是无效。
十六进制数以0x开头,如0xFFFF。
Java中曾经没有二进制文字。 Java 7支持它们,从0b开始,如0b00100001。
答案 4 :(得分:6)
以0开头的数字是八进制数。 http://en.wikipedia.org/wiki/Octal