为什么在Java中(123 == 0123)不成立?

24

我正在使用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
}
3个回答

55

0123是一个八进制数(以0开头),而123是一个十进制数。

因此,0123实际上等于83。


1
我该如何将它设置为十进制数? - Bobs

22
任何以零开头的整数都是八进制数(基数为8)。 0123 是八进制数,而 123 是十进制数。
 0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
        =3+16+64+0
        =83   

9

因为0123不是十进制数字,而是八进制(基数为8),所以它等于83。

要将一个数字k转换为十进制,请使用定义其八进制表示的公式:

enter image description here

0123 base-8 = 83 decimal

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

一个八进制数字由 ASCII 数字 0 开头,后跟一个或多个 ASCII 数字 0 到 7,并且可以表示正整数、零或负整数。
注意:在 Java 中,八进制值用前导零表示,普通十进制数不能以零开头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接