JAVA三目运算符Char类型的输出结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA三目运算符Char类型的输出结果相关的知识,希望对你有一定的参考价值。

public class Q
public static void main(String[] args)
int i=0;
char x='E';
System.out.println(false?i:x);


为什么x的输出结果为69

首先三目运算符
1 假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
2 假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
3 除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型

由于2个都为变量 所以属于第三种情况 所以x会被提升为int类型
而字符E的ASCII代码是69 所以输出69
参考技术A 这个你应该查一下ASCII 码表就明白了, ,‘A’的ASCII码为65,'E'的ASCII码值为69;当char和int一起做比较或运算时,char会自动转为int 参考技术B 判断为假,输出x,x是字符‘E’当整形数字,输出了他的阿斯科码值 参考技术C 因为你放到了计算里, char类型的自动转成了int类型了追问

那就是由小转大后直接输出不再重新转回char类型了吧

参考技术D E的ASCII代码是69追问

我知道啊,如果直接进行System输出结果为E,通过三目运算符运算后才会得出69,是因为底层为int类型,运算完毕后不再重新转换回去char吗

追答

E和69在内存里面是一个东西,不需要转换的,在你这里三目后类型变化,是因为false?1:x中的1是整形。

IT兄弟连 Java语法教程 三目运算符

Java提供了一个特殊的三目(三个分支)运算符,它可以替代特定类型的if-then-else语句结构。这个运算符是“?”乍一看可能有一些困惑,但一旦理解“?”运算符,就可以高效地使用它。“?”运算符的一般形式如下:

expression1 ? expression2 : expression3

其中expression1可以实任何结果为布尔值的表达式。如果expression1的结果为true,就对expression2进行求值;否则对expression3进行求值。“?”运算符的结果是对其进行求值的表达式。expression2和expression3都需要返回相同(或兼容)的类型,并且不能为void。

下面是使用“?”运算符的一个例子:

ratio = denom == 0 ? 0 : num/denom;

当Java对这条赋值语句进行求值时,首先分析“?”左侧的表达式,如果denom等于0,就对问号和冒号之间的表达式进行求值,并将其作为整个“?”表达式的值。如果denom不等于0,就对冒号之后的表达式进行求值,并作为整个“?”表达式的值。“?”运算符产生的结果就会赋值给ratio。

以上是关于JAVA三目运算符Char类型的输出结果的主要内容,如果未能解决你的问题,请参考以下文章

Java三目运算符

java三目运算符

Python之三目运算符

java 三目运算符

Java三目运算符的使用(欢聚时代考题)

IT兄弟连 Java语法教程 三目运算符