【问题标题】:why is not (123 == 0123) in java?为什么Java中没有(123 == 0123)?
【发布时间】:2012-05-14 17:53:27
【问题描述】:
我正在使用 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
}
【问题讨论】:
标签:
java
integer
operators
equality-operator
【解决方案1】:
0123 是八进制数 (leading 0),而 123 是十进制数。
所以 0123 实际上等于 83。
【解决方案2】:
任何以零开头的整数都是八进制数(以 8 为基数)。
0123 是八进制数,123 是十进制数
0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
=3+16+64+0
=83
【解决方案3】:
因为 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
八进制数字由一个 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零整数或负整数。
注意:八进制值在java中用前导零表示,普通十进制数不能有前导零