class test{
public static void main(String args[]){
int a = 011;
System.out.println(a);
}
}
为什么输出结果是9
而不是011
?
如何获得输出结果011
?
JLS 3.10.1 描述了定义整数的四种方式。
整数字面值可以使用 十进制(基数为10)、十六进制(基数为16)、八进制(基数为8)或者二进制(基数为2)进行表示。
八进制数字由数字0后跟一个或多个数字0到7组成...
十进制数字要么是单个数字0,代表整数零,要么是由数字1到9中的一个数字,后面可选地跟上一个或多个数字0到9...
总之,如果您的整数字面值(即011
)以0开头,则 Java 将假定它是八进制表示法。
如果你想让你的整数保持值为11,那么不要太花哨,直接赋值11即可。毕竟,符号对于值来说并没有改变什么。我的意思是,从数学角度来看,11 = 011 = 11.0。
int a = 11;
int
转换为String
时)才有影响。String with3digits = String.format("%03d", a);
System.out.println(with3digits);
"%03d"
用于添加前导零。
或者,您可以使用printf
方法在1行中完成它。
System.out.printf("%03d", a);
以数字0开头的数值被解析为八进制数(即基数为8)。011在八进制中表示9。
011
被解释为八进制数字,意味着它是基于8的。参见此SO帖子。来自Stuart Cook的被接受答案中说到:011
被解释为8+1=9
String.format("%02d", a)
- MadProgrammer