Java自学笔记系列九: 三元运算符的幽默

首先看下面的一段小程序:

上面的02行~07行代码可以简化成一行代码,因为三元运算符的存在,但是相较起来,上面的更具有可读性.而三元运算符的使用可以显示你编程的牛叉.

Java中三元运算符表达如下:

[条件语句] ? [表达式1] : [表达式2]

则上面的代码可以转换写成如下形式:

看来,美国空间,语法改变了,结果也跟着变了.

对表达式 num-10+’A’ 做了如下的改变,并查看结果如下,也非所愿,还是 D的ASCII码值:

将输出语句中的格式再次变化下,结果才是想要的字符D.

为什么呢?Java虚拟机幽了你一默.以下是对这个问题进行探究的过程,仅供参考,若有问题,请及时指正.

1,查了println()的实现,是函数的重载,根据参数列表中的不同类型进行输出的.比如上面的小例子依次调用的是:

2,那么对已代码片段1,代码片段2的输出结果只能从“Java操作符为了防止类型溢出所做的隐式转型处理”这个角度来解释了.所以,在上面两个片段中,表达式的结果分别是char和int,Java编译器当然会将其中较“窄”的char隐式转型为较“宽”的int。接着,片段3,做了显式转型处理,将"宽"的int转型为"窄"的char.

3,如2所言,那下面的结果该如何解释呢?先看代码:

嗯? 上面的解释在这里说不通.莫非对常量和变量还有不同的编译方式.

4,个人认为是如果一个表达式的类型是byte、short、char类型的,香港空间,而另外一个是int类型的常量表达式,且int的值若可以用类型byte、short、char三者之一表示的,那么返回的结果则是三者之一.

综上所述,可以总结为如下三点:

1, 如果表达式1和表达式2操作数具有相同的类型,美国服务器,那么它就是条件表达式的类型。

 2, 如果一个表达式的类型是byte、short、char类型的,而另外一个是int类型的常量表达式,且int的值若可以用类型byte、short、char三者之一表示的,那么返回的结果则是三者之一

3, 表达式1,2类型不一致的时候,可以显式强制转换最终的类型。

到此为止了,若你有什么好的想法可以追加,欢迎讨论。

嗯对了,表达式1,2也可以是一个函数调用.这里就不在赘述了.

本文出自 “IvanTian” 博客,转载请与作者联系!

当你开展的事业从事的行动穷途末路大势已去的时候,

Java自学笔记系列九: 三元运算符的幽默

相关文章:

你感兴趣的文章:

标签云: