gpt4 book ai didi

java - 为什么 Java 中的内联条件自动转换数字?

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:18 25 4
gpt4 key购买 nike

在下面的内联条件中,人们可能期望分别打印一个整数和一个 double :

System.out.println(true ? 0 : 0.0);
System.out.println(false ? 0 : 0.0);
System.out.println(true ? new Integer(0) : new Double(0.0));
System.out.println(true ? 0 : "");

相反,当它们一起出现时,它们都打印为 double :

 0.0
0.0
0.0
0

为什么在内联条件中与其他数字一起出现时会自动转换数字?

编辑:如果发生这种情况是因为 System.out.println 重载,那么情况是:

list.add(true ? 0 : 0.0);
list.add(false ? 0 : 0.0);
list.add(true ? new Integer(0) : new Double(0.0));
list.add(true ? 0 : "");
System.out.println(list);

输出:

[0.0, 0.0, 0.0, 0]

最佳答案

Why are numbers auto-cast when occurring with other numbers in inline conditionals?

条件表达式必须有单一结果类型,该类型用于确定要使用 System.out.println 的哪个重载。重载总是在编译时确定,如果编译器根据选择的条件为表达式采用两条完全独立的路径,这将真的很尴尬。

如果您根据条件做两件不同的事情,请使用if。如果您想根据条件在具有一个结果类型的两个值之间进行选择,那么条件运算符是完美的选择。

编辑:IMO,这里有趣的案例是第三个。编译器可以选择不执行任何转换,而只调用println(Object)。为了表明它没有这样做,这是一个单独的测试:

Object x = true ? new Integer(0) : new Double(0.0);
System.out.println(x.getClass());

这会打印出 class java.lang.Double - 如果您查看字节码,您会看到它正在拆箱 int 然后将其重新装箱为 。有关如何确定所有内容的详细信息,请参阅 section 15.25 of the JLS .

关于java - 为什么 Java 中的内联条件自动转换数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com