当前导零的长变量时,我无法理解输出的原因。
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
答案 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)
00123
或0123
或0123l
都是相同的。你可以测试一下。它们是八进制数。如果你转换它们,你会发现(1X8^2)+(1X8^1)(1X8^0)=64+16+3=83
。如果需要,可以将它们存储为String。