为什么java中没有(123 == 0123)?

Bob*_*obs 23 java integer operators equality-operator

我正在使用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
}
Run Code Online (Sandbox Code Playgroud)

MBy*_*ByD 55

0123是八进制数(前导0),123而是十进制数.

所以0123实际上等于83.

  • 删除前导0 (27认同)

Sam*_*iya 21

任何以零为首的整数都是八进制数(基数为8).

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

 0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
        =3+16+64+0
        =83   
Run Code Online (Sandbox Code Playgroud)


Nul*_*teя 9

因为0123在十进制数字中不是八进制数(基数为8)所以这等于83

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

在此输入图像描述

0123 base-8 = 83 decimal

0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
     =3+16+64+0
     =83   
Run Code Online (Sandbox Code Playgroud)

八进制数字由ASCII数字0后跟一个或多个ASCII数字0到7组成,并且可以表示正整数,零整数或负整数.

注意:八进制值用java表示,前导零正常十进制数不能有前导零