微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段代码将 value 转换为 double 而不是 float?

如何解决为什么这段代码将 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 的构造函数,不仅因为它可以处理 doublefloat 情况,还因为没有 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 举报,一经查实,本站将立刻删除。