gpt4 book ai didi

java - 为什么下面的 Java 程序会给出奇怪的输出?

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:08 25 4
gpt4 key购买 nike

我在 Java Puzzlers 中找到了下面的拼图,

public class DosEquis {
public static void main(String[] args) {
char x = 'X';
int i = 0;
System.out.print(true ? x : 0);
System.out.print(false ? i : x);
}
}

我尝试了这段代码并也运行了它,但输出并没有按照我的猜测出现,

我的猜测输出应该是:XX 但在
实际输出是:X88

我试了很多但我不能,任何人都可以给我们解释吗?为什么会出现不同的输出?因为我能够理解第一个 print() 将打印变量 char x 字符值,但是第二个 print() 打印 88 char x 中值的 ASCII 表示。如果我像这样简化第二个 print() 中的三元运算符表达式

if(false){
System.out.print(i);
}else{
System.out.print(x);
}

然后输出是XX,很奇怪,谁能解决这个问题?

理解三元运算符对我有很大帮助。

提前致谢!

最佳答案

此行为的原因是三元具有编译器必须提前选择的一种结果类型,并且响应时调用了 print 的风格。

中是真的吗? x : 0 情况下,0 被视为 char 值,并调用 print(char)。在第二种情况下,由于 i 是一个 intx 也被隐式转换为 int(扩大转换) 和 print(int) 被调用,产生数字输出。相反,将 i 隐式转换为 char 是非法的,因为它可能会丢失精度。

静态解析类型的含义可以用这个例子来展示——而不是用print,因为有一个print(Object),但是考虑一下:

void method(boolean b);
void method(Integer i);
...
method(cond? false:0);

无论cond 是什么,都有一个与参数兼容的重载。但是,编译器需要选择一个重载,这在编译时是不可能的。编译器将自动装箱并将表达式分配为 Object*,但没有 method(Object)


*实际上,我的编译器说“类型 Test 中的方法 method(boolean) 不适用于参数 (Object&Serializable&Comparable )”,但这一点是成立的。

关于java - 为什么下面的 Java 程序会给出奇怪的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647890/

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