java三元运算符_java三元运算符详解

java三元运算符_java三元运算符详解最近在带领实习生中遇到很多新手问与三元运算符有关的 java 题目 多数为代码结果题 少数为应用题 鉴于很多资料上对于 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  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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175701.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:38
下一篇 2026年3月26日 下午11:38


相关推荐

  • RIder2021激活码(JetBrains全家桶)「建议收藏」

    (RIder2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsa…

    2022年3月25日
    2.5K
  • Android 浏览器分享到APP「建议收藏」

    Android 浏览器分享到APP「建议收藏」1.在配置文件添加权限&lt;uses-permissionandroid:name="com.android.launcher.permission.INSTALL_SHORTCUT"/&gt;2.在配置文件中给分享到APP的界面(Acticiy)添加intent-filter&lt;intent-filter&gt;&lt;actionandroid:name="android…

    2022年5月14日
    47
  • 标准Lena测试图像下载「建议收藏」

    标准Lena测试图像下载「建议收藏」在做图像处理的时候我们往往会使用

    2022年6月19日
    88
  • 100+Python编程题给你练(附答案)

    大家如果能坚持独立思考完成以下题目,一定可以帮大家轻松getPython的编程技能。目前,这个项目已经获得了3994Stars,2952Forks。Github地址:Python-programming-exercises首先,这100+练习题根据难易程度分为三个等级:Level1、2和3。下面对如何定义这三个Level进行了说明,大家可以结合自身的学习能…

    2022年4月4日
    111
  • 面试手写代码的经验分享

    面试手写代码的经验分享前言今天分享一下自己面试的时候遇到的写面试题的经验分享。在面试的时候,分为视频面试和现场面试,接下来讲解着两部分。视频面试在我和我周围的同学参加过的公司里面,不在现场的面…

    2022年5月16日
    40
  • 允许Traceroute探测「建议收藏」

    允许Traceroute探测「建议收藏」漏洞描述使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来了解目标网络的网络拓扑。解决方法在防火墙中禁用TimeExceeded类型的ICMP包

    2022年7月4日
    236

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号