gpt4 book ai didi

java - 条件赋值中的数字提升在 Java 中的工作原理

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:23 24 4
gpt4 key购买 nike

在java中发现了一些奇怪的东西。

代码:

    System.out.println(System.getProperty("java.version"));
System.out.println((true) ? (int)2.5 : 3.5);
System.out.println((true) ? (int)2.5 : 3);
System.out.println((true) ? (int)2.5 + "" : 3.5);

结果:

1.8.0_402.022

这是什么?为什么仅当 false 的值不是 double 值或字符串值添加到 true 的值时才返回整数值?是错误吗?

最佳答案

specification记录 Java 中的数字提升。在第 2 节中,它说如果任一操作数是 double 类型,则结果是 double 类型。在这个specification (由@Januson 添加),提到:

the type of the conditional expression is the promoted type of the second AND third operands

现在,如果我们将这两个文档应用到我们的示例中,我们将得到以下内容:

System.out.println(System.getProperty("java.version"));

这是 Java 的版本(发布)。它是一个 String

System.out.println((true) ? (int)2.5 : 3.5);

在这种情况下,编译器查看条件的两个部分并决定数据类型。 (int)2.5 是一个 integer 而 3.5 是一个 double。结果将是一个double。因此 2.5 的整数部分(即 2)将被转换为 double

System.out.println((true) ? (int)2.5 : 3);

在这种情况下,编译器查看 2 个整数,因此结果是 integer。第一种情况给出一个 integer,第二种情况也是一个 integer,所以结果将是 integer

System.out.println((true) ? (int)2.5 + "" : 3.5);

在这种情况下,编译器会查看第一种情况并取整数部分 2。现在,因为这个数字附加到字符串,所以它变成了 String。结果也将是一个字符串。如果您尝试返回 3.5,它将作为 String 而不是 double 返回。

关于java - 条件赋值中的数字提升在 Java 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39974075/

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