3

我无法理解为什么当 long 变量带有前导零时这样的输出。

public class Test{
        public static void main(String[] args) {
             long var1=00123l;
             long var2=123l;
             System.out.println("Variable 1--->"+var1);
             System.out.println("Variable 2--->"+var2);
             System.out.println(var1==var2);
        }
    }

输出:

Variable 1--->83
Variable 2--->123
false
4

5 回答 5

7

当文字以 0 为前缀时;java将其视为八进制数。当您打印相同的数字时,默认情况下它以 base(10) 格式打印。因此00123l打印为83

于 2012-12-17T10:07:08.107 回答
7

前导零变成00123l进制文字,并且 123 8 =83 10

JLS

八进制数字由一个 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 和下划线组成,可以表示正整数、零整数或负整数。

当您打印该值时,它会以 10 为基数打印,因此您会看到83.

于 2012-12-17T10:07:17.503 回答
4

当您将前导零添加到值时,它将被解释为八进制值。

整数不能存储任何前导零。当您需要这些时,将数字存储为字符串。

于 2012-12-17T10:07:56.177 回答
2

当您编写带有前导零的整数文字时,它被解释为八进制数。00123八进制是83十进制。

于 2012-12-17T10:08:21.370 回答
0

00123对于 Java,或01230123l全部相同。你可以测试一下。它们是八进制数。如果你转换它们,你会发现(1X8^2)+(1X8^1)(1X8^0)=64+16+3=83. 如果您愿意,可以将它们存储为字符串。

于 2012-12-17T10:39:12.663 回答