最佳答案
到目前为止,我认为 实际上是最终决定和 期末考试或多或少是等价的,JLS 会把它们视为相似的,如果在实际行为中不是相同的。然后我发现了这个人为的场景:
final int a = 97;
System.out.println(true ? a : 'c'); // outputs a
// versus
int a = 97;
System.out.println(true ? a : 'c'); // outputs 97
显然,JLS 在这两者之间起到了重要的作用,我不知道为什么。
我读过其他类似的文章
但是他们没有说得这么详细。毕竟,在更广泛的层面上,它们看起来几乎是等价的。但是深入研究,他们显然不同。
是什么导致了这种行为,有人能提供一些 JLS 定义来解释这一点吗?
编辑: 我发现了另一个相关的场景:
final String a = "a";
System.out.println(a + "b" == "ab"); // outputs true
// versus
String a = "a";
System.out.println(a + "b" == "ab"); // outputs false
因此字符串实习在这里的行为也不同(我不想在实际代码中使用这个代码片段,只是对不同的行为感到好奇)。