![](/img/trans.png)
[英]How does Java decide which operator in a math expression has to be (un)boxed?
[英]How does Java decide the type of a ternary conditional operator expression?
有谁能解释一下?
public class Test {
public static void main(String[] args) {
char c = 'A';
int i = 0;
boolean b = true;
System.out.println(b ? c : i);
System.out.println(b ? c : (char)i);
System.out.println(b ? c : 0);
System.out.println(b ? c : (char)0);
}
}
输出:
65
一种
一种
一种
从我站立的地方看起来确实很奇怪。 我本以为只有A
才能打印出来。 而且:怎么来的,当我替补0
为i
输出的变化? 对于i
所有值,输出似乎相同,而不仅仅是0
。
如果要选择苹果与橙子,则必须提升其中一个(较小的一个):
public class Test {
public static void main(String[] args) {
char c = 'A';
int i = 0;
boolean b = true;
System.out.println(b ? c : i); // Promoted to int ---> 65
System.out.println(b ? c : (char)i); // Not promoted ------> A (char vs char)
System.out.println(b ? c : 0); // Not promoted vs null/0
System.out.println(b ? c : (char)0); // Not promoted vs char
}
}
如果有一个变量类型,如nibble
那么在选择时你不会得到不同的输出。
System.out.println(b ? c : (nibble)i); // I know there is no nibble. :)
// nibble promotes to char.
// I know... there is no nibble.
//so, output is A
从Java语言规范,关于类型转换和促销(参见粗体文本)
用Java编程语言编写的每个表达式都有一个类型,可以从表达式的结构和表达式中提到的文字,变量和方法的类型中推断出来。 但是,可以在表达式类型不合适的上下文中编写表达式。 在某些情况下,这会在编译时导致错误。 在其他情况下,上下文可能能够接受与表达式类型相关的类型; 为方便起见,Java编程语言不是要求程序员明确指出类型转换,而是执行从表达式类型到其周围上下文可接受的类型的隐式转换。
在编译时发生的类型转换解释了输出。
在涉及i
的情况下, c
已被提升为整数。
在涉及0
的情况下,将其视为字符,因此c
保持为字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.