Java 为什么字符重载不适用于三元表达式中的整数和字符?
代码 输出Java 为什么字符重载不适用于三元表达式中的整数和字符?,java,Java,代码 输出 public static void main(String[] args) { System.out.println(returnValue('a')); System.out.println(returnValue(1)); System.out.println(returnValue(true ? 'a' : 1)); System.out.println(returnValue(false ? 'a' :
public static void main(String[] args) {
System.out.println(returnValue('a'));
System.out.println(returnValue(1));
System.out.println(returnValue(true ? 'a' : 1));
System.out.println(returnValue(false ? 'a' : 1));
}
public static int returnValue(int i) {return i;}
public static char returnValue(char c) {return c;}
重载函数工作得很好,但是当使用三元时,它似乎将int和char都转换为char版本。为什么会发生这种转换?这由JLS在以下章节中定义: 条件表达式的类型确定如下: [……] 如果其中一个操作数为T类型,其中T为字节、短字符或字符,而另一个操作数为int类型的常量表达式§15.28,其值可在T类型中表示,则条件表达式的类型为T
因此,在您的例子中,提到的T将是char,因为您有常数“a”,它是char,常数1是int,它适合于char类型的值范围。这是由JLS在: 条件表达式的类型确定如下: [……] 如果其中一个操作数为T类型,其中T为字节、短字符或字符,而另一个操作数为int类型的常量表达式§15.28,其值可在T类型中表示,则条件表达式的类型为T 在你的例子中,提到的T将是char,因为你有一个常数'a'是char,常数1是int,它符合char类型的值范围
a
1
a