【发布时间】:2021-02-17 16:23:51
【问题描述】:
我有一个问题。为什么此代码打印 YYZ10.0 而不是打印 XXZ10.0? 第一个构造函数是 A(int),然后在语句内部返回 false,因此 9+1f 应该跳转到 A(float) 构造函数,但它会跳转到 A(double)。
public class Main {
public static void main(String[] args) {
System.out.print(new A(011).fun()[1]);
}
}
class A{
double value;
public A(int value){
this(value >> 2 == 1 ? value+1.0 : value+1f);
}
public A(float value){
System.out.print("XX");
this.value = value;
}
public A(double value){
System.out.print("YY");
this.value = value;
}
public Object[] fun(){
return new Object[]{new Object(), this};
}
public String toString(){
return "Z"+value;
}
}
【问题讨论】:
-
double value是双精度数,不会因为您使用+1f向其添加浮点数而自动更改为浮点数。 -
但是当我将 double 值更改为 float 值时出现错误:从 double 到 float 的 ossible 有损转换,所以我认为它仍然是 double 构造函数。
-
三元表达式的两个可能结果必须具有相同的类型。您正在尝试做的事情在某些情况下结果将是浮点数,而在其他情况下它将是双精度是不可能的。三元运算符的结果要么总是浮点数,要么总是双精度数。
标签: java object constructor