gpt4 book ai didi

java - 使用三元运算符和最终变量时出现意外输出

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

考虑这个代码片段:

public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}

运行此代码时,我希望在您的控制台中看到两个 X。然而,真正的输出是:

88
X

如果我们看一下 Java specifications regarding the ternary operator , 我们发现

If one of the operands is of type T where T is byte, short, or char, and the other operand is a constant expression of type int whose value is representable in type T, then the type of the conditional expression is T.

所以第一个输出将 'X' 字符视为 int,这就是它打印 88 的原因。

但是,我不确定为什么使用 final 会改变第二个输出的行为。

最佳答案

在第二种情况下,z2 算作 constant expression ,因为它是 int 类型的最终变量。

来自 section 4.12.4 :

We call a variable, of primitive type or type String, that is final and initialized with a compile-time constant expression (§15.28) a constant variable. Whether a variable is a constant variable or not may have implications with respect to class initialization (§12.4.1), binary compatibility (§13.1, §13.4.9) and definite assignment (§16).

Section 15.28在可用于形成常量表达式的项目集中包含“常量变量”。

z1 不是最终变量(即使没有其他东西给它赋值)所以它不是常量变量,因此也不是常量表达式 - 所以您从规范中引用的段落不适用。

关于java - 使用三元运算符和最终变量时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711431/

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