知识大全 编程高手三元运算符

Posted 表达式

篇首语:天才就是无止境刻苦勤奋的能力本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 编程高手三元运算符相关的知识,希望对你有一定的参考价值。

  首先看下面的一段小程序     int num  = ;    if(num> )    char c = (char)(num + A )     System out println( I want to get a char: +c)     else    System out println(num)         /*输出结果为     I want to get a char: D    */    上面的 行~ 行代码可以简化成一行代码 因为三元运算符的存在 但是相较起来 上面的更具有可读性 而三元运算符的使用可以显示你编程的牛叉     Java中三元运算符表达如下

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

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

     // 代码片段     System out println( I want to get a char :  + (num> ?num + A :num));     /*      或者写成下面的形式 比较明了     */     System out print( I want to get a char : );     System out println( num> ?num + A :num);     /*      以上结果均输出:      */ 

  看来 语法改变了 结果也跟着变了

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

     //代码片段     System out println(num> ?(char)(num + A ):num);     /*      输出结果是      */ 

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

     //代码片段     System out println((char)(num> ?(char)(num + A ):num));     System out println((char)(num> ?num + A :num));     /*       二者均是输出的字符 D     */ 

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

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

    println(int x) // 代码片段 的调用     println(int x) // 代码片段 的调用     println(char x) //代码片段 的调用 

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

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

    int num  =  ;     char x =  X ;     System out println(num> ? x:num); //X 的ASCII值         System out println(num> ? num:x);// num 的数值:      System out println(num> ? x: ); // 输出的是 X 的 值     System out println(num> ?  :x); // 输出的是 ASCII码值为 所对应的字符:Z 

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

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

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

   如果表达式 和表达式 操作数具有相同的类型 那么它就是条件表达式的类型

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

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

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

cha138/Article/program/Java/hx/201311/26037

相关参考

功能模块是可编程调节器中具有某种运算处理功能的子程序段,按作用分,有运算功能模块()

功能模块是可编程调节器中具有某种运算处理功能的子程序段,按作用分,有运算功能模块()A、SOE功能模块B、控制功能模块C、输入/输出功能模块D、顺序控制模块参考答案:BCD

功能模块是可编程调节器中具有某种运算处理功能的子程序段,按作用分,有运算功能模块()

功能模块是可编程调节器中具有某种运算处理功能的子程序段,按作用分,有运算功能模块()A、SOE功能模块B、控制功能模块C、输入/输出功能模块D、顺序控制模块参考答案:BCD

知识大全 高手编程之——JTextArea操作

高手编程之——JTextArea操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JTextA

知识大全 编程高手 DotNet异步消息处理方法

编程高手DotNet异步消息处理方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!如果想检索消息但

知识大全 编程高手实现ASP提速技巧五则

编程高手实现ASP提速技巧五则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  技巧之一提高使用R

知识大全 想问一下高手前辈,怎么样才能学好JAVA编程,希望推荐一些好的书籍和视频。

我是学JAVA编程的初学者!想问一下高手前辈,怎么样才能学好JAVA编程,希望推荐一些好的书籍和视频。  以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整

知识大全 程序员成为成为编程高手的二十二条军规

大学生活丰富多彩会令你一生都难忘但难忘有很多种你可以学了很多东西而难忘也会因为什么都没学到而难忘!   计算机专业是一个很枯燥的专业但即来之则安之只要你努力学也会发现其中的乐趣的   记住万丈高楼平地

知识大全 多维数组-矩阵的压缩存储- 稀疏矩阵(二)

  带行表的三元组表  为了方便某些矩阵运算在按行优先存储的三元组表中加入一个行表来记录稀疏矩阵中每行的非零元素在三元组表中的起始位  置这就是带行表的三元组表  ()类型描述  #defineMax

知识大全 C#面试题

C#面试题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一填空题c#中的三元运算符是_____?当

知识大全 哪个专科大学,学编程好点

哪个专科大学,学编程好点!爱好电脑和爱好编程是两码事~!编程你所面对的不是色彩绚丽的画面而是复杂的逻辑运算和程式专科大学哪个好?江苏联合职业技术学院是经江苏省人民政府批准、教育部备案,于2003年6月