为什么(123 == 0123)在java中不是?

2022-09-01 19:40:29

我正在使用Eclipse在Android中开发一个应用程序。我写了下面的代码,在测试中,第一个和第三个“if”块无法访问。为什么?

当我将前导零添加到数字中时,相等运算符返回 false。

int var = 123;
if (var == 0123) {
    //not reachable
}
if (var == 123) {
    //reachable
}
if (var == (int)0123) {
    //not reachable
}
if (var == (int)123) {
    //reachable
}

答案 1

0123是一个八进制数(前导 0),而 是一个十进制数。123

所以0123实际上等于83。


答案 2

任何以零开头的整数都是八进制数(以 8 为基数)。

0123是八进制数,并且是十进制数123

 0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
        =3+16+64+0
        =83