java中三元运算符_java中的三元运算符详解
最近在带领实习生中遇到很多新手问与三元运算符有关的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 //对应的字符
07 System.out.println(2==2?98:a);
08 //规则2,两个已经定义数据类型的变量,结果自动转换为精度高的
09 System.out.println(2==2?a:i);
10 //规则3,两个未定义的数值,结果自动转换为精度高的
11 System.out.println(2==2?99:9.0);
12 System.out.println(2==2?99:‘b‘);
上述代码的执行结果为: 96.0
b
97
99.0
c
大家可以参阅上述代码与结果理解三元运算符的双目数值提升问题,由于本人水平有限,希望此文能给大家带来一定的帮助和启示,也希望各位不吝赐教,提出你们的宝贵建议。
java中三元运算符_java中的三元运算符详解相关推荐
- java语言数据库编程_JAVA语言数据库编程实例详解
本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...
- java读取本地文件_java 读取本地文件实例详解
java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...
- java编程50实例_java编程实例大全及详解谜底(50例).doc
java编程实例大全及详解谜底(50例).doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 谓 ...
- java 读取本地文件_java 读取本地文件实例详解
java 读取本地文件实例详解 用javax.xml.w3c解析 实例代码: package cn.com.xinli.monitor.utils; import org.w3c.dom.Docume ...
- java使用变量输出_JAVA定义变量与输出详解
一些重要知识 一个源文件里只能有一个public类,其它类数量不限.文件名与public类名相同 java程序严格区分大小写 JAVA应用程序的执行入口是main方法固定写法:public stati ...
- java闰年判断原理_java 面试题闰年判断详解及实例
java 面试题闰年判断详解及实例 java 闰年判断 前言: 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数: 2. 年份是400 ...
- java 正则判断小数_java判断是否是小数详解(正则方法)
java使用正则判断是否小数的方法:(推荐:java视频教程)public static void main(String[] args) { Pattern p1 = Pattern.compile ...
- java 自定义异常实例分析_Java自定义异常类的实例详解
Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写.我们常用的类ArithmeticException,NullPointerException,Ne ...
- java 抽象属性 设计_Java 抽象类与模板设计模式详解
抽象类 抽象类是为了方法覆写而提供的类结构,因为其无法自身直接进行对象实例化操作,所以在实际应用中,抽象类主要目的是进行过程操作使用,当你要使用抽象类进行开发的时候,往往都是在你设计中需要解决类继承问 ...
- java类多例_Java多例设计模式实例详解
本文实例讲述了Java多例设计模式.分享给大家供大家参考,具体如下: 一.多例设计模式定义 多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池. 二.多例模式静态类图 三.多例模式代码 ...
最新文章
- Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
- Cento7 PHP5.6 升级 PHP7.0.0
- 如何使用 Javascript/node.js 在 WebRTC 中构建音视频通话APP?
- leetcode101. 对称二叉树(两种做法)
- 中文字符频率统计python_python统计字符串出现最多的字母及其出现次数
- 利用redis实现分布式锁:加锁与解锁
- Memory存储引擎
- K8S_Google工作笔记0008---通过二进制方式_搭建集群介绍
- 送一个内存泄漏给 2016 的记几
- 【最小割】HDU 4289 Control
- nvidia显卡驱动,cuda,和cudnn版本
- 小黑T61P 挂了,显卡门,维修经历跟踪
- Deep Cosine Metric Learning for Person Re-Identification
- STL源码剖析——stl_algobase.h
- 操作系统——7.虚拟存储技术
- window.name属性详解(Javascript)
- labview能打开c语言文件吗,LabVIEW还是C语言?(能够换个方式提问吗?)
- bzoj 3755: Pty爬山
- 公司企业邮箱怎么选择?哪家企业邮箱品牌最好用?
- 小何讲进程: 编写Linux守护进程方法详解
热门文章
- 数学家们是怎么玩趣味拼图游戏的?
- c# dataset 和DataGridView的绑定详细
- 汽车ECU的bootloader程序设计
- 服务器协议失败,Chrome中的HTTPS服务器“不支持的协议错误”
- 什么是 CI/CD?持续集成和持续交付解释
- (高小德用车)高仿滴滴/快的应用源代码
- 仿邓杰作品(艺家网站)总结
- java xml pull解析_Android App中使用Pull解析XML格式数据的使用示例
- android两边是椭圆的按钮,自定义Button形状(圆形、椭圆)
- 揭开宏的神秘面纱:什么是宏,为什么使用宏?