在我的实际项目中,偶然发生的是我修改过的小程序。
我无法弄清楚为什么输出 10 ?
public class Int
{
public static void main(String args[])
{
int j=012;//accidentaly i put zero
System.out.println(j);// prints 10??
}
}
之后,我把两个零仍然给出输出10。
然后我将 012更改为0123 ,现在它输出的是83?
任何人都可以解释原因吗?
答案 0 :(得分:21)
我将012更改为0123,现在是输出83?
因为,它被视为八进制基数(8),因为该数字在前导中为0。所以,它的相应十进制值是10
012:
(2 * 8 ^ 0) + (1 * 8 ^ 1) = 10
0123:
(3 * 8 ^ 0) + (2 * 8 ^ 1) + (1 * 8 ^ 2) = 83
答案 1 :(得分:6)
前导零表示该数字被解释为octal而不是十进制。
答案 2 :(得分:2)
您正在使用类型为int常量的八进制表示形式将常量分配给变量。因此,编译器使用此算法0 * 8 ^ 0 + 1 + 8 ^ 1 = 10将八进制表示形式的整数值转换为十进制表示形式,从而得到10,然后将j赋值为10。请记住,当您看到一个常数开始时0表示八进制表示形式的整数。即0111不是一百零一,而是1 * 8 ^ 0 + 1 * 8 ^ 1 + 1 * 8 ^ 2。
答案 3 :(得分:1)
如果数字以0开头,则该数字将被解释为八进制数字,而不是十进制。八进制值为8,十进制为10。
mInterfaceMock.Verify(x => x.MethodToTest(), Times.Once);