请问有人能解释一下为什么这段代码无法编译:
boolean r = (boolean) 0;
为什么这个可以编译?
double z = (float) 2.0_0+0___2;
我不理解浮点数后面的数字所写的字母表。
请问有人能解释一下为什么这段代码无法编译:
boolean r = (boolean) 0;
double z = (float) 2.0_0+0___2;
我不理解浮点数后面的数字所写的字母表。
第一种方法无法编译,因为你不能将数字强制转换为 boolean
。一个 boolean
只能是 true
或 false
。
第二种方法只是使用下划线 分隔数字,例如 2_000_000
以提高可读性。但在这种情况下,它们被用来降低可读性,同时进行了 float
的转换(将 double
转换为 float
并赋给 double
在这种特定情况下没有任何作用)。
2.00+02
,其中添加了一个八进制值02
的字面量double
。这基本上仍然只是2+2
,但如果八进制值为0___10
,则会得到z = 10
的结果。然后你需要强制转换为float
,这可能会影响最终结果,因为64位被强制转换为32位,然后再返回到64位。这可能使最终结果比没有强制转换更不精确。false
,但被评估为一个boolean
值,它将是false
。在C中,0是false
。这些都是你期望的可能原因。然而,在Java中,你不能将数字转换为boolean
。如果你想要进行真实的评估,你可以实现帮助方法,比如:public class LooselyTyped {
public boolean toBoolean(int input) {
return input != 0;
}
public boolean toBoolean(Object input) {
return (input != null) && (!input.equals(""));
}
}
然后:
boolean lt = LooselyTyped.toBoolean(yourvariable);
0
开头的数字,因为 Java 会将其视为八进制数。例如:int i = 010;System.out.println(i);
将输出8
。 - user8097737