最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题。鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习。

什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值。

其示例代码如下:boolean a = 20 < 45 ? true : false;三元运算符的优先级高于赋值运算符,故判断表达式值为真,去第一个true,a的值为true。

三元运算符用于判断,其等价的if-else语句如下所示:

01  boolean a; //声明boolean变量

02  if(20<45) //将20<45作为判断条件

03    a = true; //条件成立将true赋值给a

04  else

05    a = false;

很多时候三元运算符可以和if-else语句进行互换,它们两个可以等价的实现判断的效果。但是三元运算符与if-else语句也还是有不同之处的,下面来具体的谈谈不同之处。

第一,两者之间对于返回值有不同的要求,三元运算符是必须要有返回值要求,其运算后一定会有一个结果返回供程序开发人员使用;而if-else语句并不一定有返回值,其执行结果可能是赋值语句或者打印输出语句(相信这一点大家都比较好理解)。

第二,两者的性能不同,三元运算符的运算性能相对于if-else语句来说要高一些,但是在一些小型的applet开发和日常学习开发中可以忽略不计。

第三,两者使用范围不同,在ireport的一些动态执行的情况下,只能用三元运算符而不能用if-else语句,当然在大多数情况下两者是可以等价互换的。

第四,两者的语言特性不同,三元运算符涉及到一种成为双目数值提升(binary numeric promotion)的语言特性。所谓的双目数值提升,在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下:

1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,,那么返回的结果就是范围大(精度高)类型

2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型

3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型

而jvm在给数值分配数据类型的时候会选取刚好能装下该数据大小精度的数据类型进行分配(99.0为float,99为byte/short),在java中常见数据类型其范围从小到大(精度由高到低):byte

01  char a='a';

02  int i=96;

03  //规则1,定义了数据类型的变量与未定义变量的数值,结果自动转换为精度高的

04  System.out.println(2==2?i:9.0);

05  //jvm给数值分配的数据类型,98并不是int类型的,而是byte/short,故结果会变为ASCII码98对应的字符

06  System.out.println(2==2?98:a);

07  //规则2,两个已经定义数据类型的变量,结果自动转换为精度高的

08  System.out.println(2==2?a:i);

09  //规则3,两个未定义的数值,结果自动转换为精度高的

10  System.out.println(2==2?99:9.0);

11  System.out.println(2==2?99:'b');

上述代码的执行结果为:  96.0

b

97

99.0

c

大家可以参阅上述代码与结果理解三元运算符的双目数值提升问题,由于本人水平有限,希望此文能给大家带来一定的帮助和启示,也希望各位不吝赐教,提出你们的宝贵建议。

java三元运算符_java三元运算符详解相关推荐

  1. java super实例_java Super 用法详解及实例代码

    java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java  Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...

  2. java enum 变量_java枚举使用详解

    package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * ...

  3. java异常体系_JAVA异常体系结构详解

    一.什么是异常 异常:程序在运行过程中发生由于硬件设备问题.软件设计错误等导致的程序异常事件.(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象.      --百 ...

  4. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  5. java linkedlist 节点_JAVA学习-LinkedList详解

    1.定义 实现List接口与Deque接口双向链表,实现了列表的所有操作,并且允许包括null值的所有元素,对于LinkedList定义我产生了如下疑问: 1.Deque接口是什么,定义了一个怎样的规 ...

  6. java abstract 变量_Java基础知识详解:abstract修饰符

    abstract详解 abstract一般用来修饰类和方法. 1.abstract修饰类 abstract修饰类,会使得类变成抽象类,抽象类不能生成实例,但是可以作为对象变量声明的类型,也就是编译时类 ...

  7. java 正则 实例_Java正则表达式实例详解

    创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xh ...

  8. java backlog满_java socket参数详解:BackLog

    输入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数.如果队列满时收到连接指示,则拒绝该连接. 注意: 1. backlog参数必须是大于 0 的正值.如果传递的值等于或小于 0, ...

  9. java反射模式_Java反射机制详解

    对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...

  10. java 操作序列_JAVA序列化操作详解

    一.概述 很多时候我们需要将对象的信息以文件的形式存储到硬盘上以便以后可以恢复使用.我们可以按照一定的格式将变量的值依次写到特定格式的文件中.但有时候我们希望只有我们自己可以读懂它并且修改它,这就是序 ...

最新文章

  1. 【6】font-size 字体属性
  2. Oracle中的数据字典技术及常用数据字典总结
  3. opencv连通域去除小块面积_晋中市建成区面积排名,榆次区最大,榆社县最小,来了解一下?...
  4. 如何编写Hadoop调度器
  5. 【原】TreeView+Checkbox级联操作(IE/FireFox测试通过)
  6. 装饰者模式源码解析(spring-session mybatis jdk servlet)
  7. Orleans解决并发之痛(三):集群
  8. 【Hitachi2020C】ThREE【构造】【二分图染色】
  9. JavaScript高级程序设计之客户端检测
  10. Inception-v4论文总结
  11. Android JS交互-记录我所遇到的
  12. 个人QQ号码推广代码
  13. rm ,rm -rf , rm -f 以及rm 命令的其他参数命令
  14. 宜立方商城第二天心得
  15. cacti监控及配置
  16. Netty使用FileUpload报错Not represented by a file
  17. 面向对象进阶和模块初识
  18. 一个简单的三极管音频放大电路
  19. 笔记本蓝牙、无线断连解决方案(以联想小新Pro16 锐龙6800H版瑞昱网卡为例)
  20. php网站建设实训引言_网站建设实训心得

热门文章

  1. webserver接口调用(一)
  2. 一、CC2530简介
  3. 有没有五金产品展开计算机软件,拆单软件功能介绍
  4. pywifi 破解WiFi密码
  5. iPhone SE第三代强势入局后,我们来谈谈iPhoneSE2020
  6. uat测试用例和sit测试用例_集成测试和UAT测试(8.7)
  7. 国内服务器 显示国外ip,国外ip访问国内服务器地址
  8. 开源商城小程序源码(小程序商城完整版源码)附搭建部署教程
  9. Redis入门(适合新手)
  10. 局域网快速传输数据(大量文件)