具有前导零输出的长变量

时间:2012-12-17 10:05:56

标签: java

前导零的长变量时,我无法理解输出的原因。

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

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

前导零将00123l变为octal字面值,123 8 = 83 10

来自JLS

  

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

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

答案 2 :(得分:4)

将前导零添加到值时,会将其解释为八进制值。

整数不能存储任何前导零。如果需要,请将数字存储为字符串。

答案 3 :(得分:2)

当您使用前导零写一个整数文字时,它被解释为octal个数字。八进制中的00123是十进制的83

答案 4 :(得分:0)

对于Java,

0012301230123l都是相同的。你可以测试一下。它们是八进制数。如果你转换它们,你会发现(1X8^2)+(1X8^1)(1X8^0)=64+16+3=83。如果需要,可以将它们存储为String。