如何解决为什么这段代码将 value 转换为 double 而不是 float?
我有一个问题。为什么此代码打印 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;
}
}
解决方法
如果一个方法有多个重载,Java 会选择在编译时调用哪个,而不是在运行时。在这种情况下,您通过 this
调用构造函数。在编译时,Java 决定调用三个构造函数中的哪一个,您可以看到它必须是接受 double
的那个。
Java 必须选择接受 double
的构造函数,不仅因为它可以处理 double
和 float
情况,还因为没有 float
情况.三元表达式只能有一种类型。有时不是double
,有时不是float
;总是double
。
考虑这个声明:
____ result = value >> 2 == 1 ? value+1.0 : value+1f;
你会在空白处填什么类型?没有办法写“有时是 double
,有时是 float
”。它必须是 double
。
更改这一行(在 A(int)
构造函数中):
this(value >> 2 == 1 ? value+1.0 : value+1f);
为此:
this(value >> 2 == 1 ? value+1f : value+1f);
它应该以这种方式调用正确的构造函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。