java 三元表达式_Java探究心得之三元运算符
首先看一下三元运算符的格式
[条件语句] ? [表达式1] : [表达式2]
其中如条件语句为真执行表达式1,否则执行表达式2.简单的例子就不举了,来点其它的。在JDK1.5以前的版本中,表达式1和表达式2都要求是相同的类型,比如都是String或者char之类的,在JDK1.5以后,有了自动拆箱和装箱的原因,两者只要其中一种或者两者都能被拆箱即可,比如表达式1为Integer,而表达式2为int类型的,比如如下
1 int a = 1;2 Integer b = 2;3 boolean c = ture;4 int d = c ? b : a;
还有个需要注意的是,如果表达式1和表达式2的类型不相同,那么他们需要对交集类型的自动参考转换。例如如下这段代码
1 String str = "abc";2 StringBuilder strbu = new StringBuilder("def");3 boolean boo = true;4 CharSequence cs = boo ? str : strbu;
因为String和StringBuilder都实现了CharSequence这个接口。
确定条件表达式结果类型的规则的核心是以下3点:
1 如果表达式1和表达式2操作数具有相同的类型,那么它就是条件表达式的类型。
2 如果一个表达式的类型是byte、short、char类型的,而另外一个是int类型的常量表达式,且它的值可以用类型byte、short、char三者之一表示的,那么条件表达式的类型就是三者之一
3 否则,将对操作数类型进行二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型
以上的三点可以用如下的代码来帮助理解:
1 char ch = 'a';2 int num = 0;3 boolean bool = true;4 System.out.print( bool ? ch : 0); //这里不是 bool ? ch : num ,那样会打印两个975 System.out.print( !bool ? num : ch);
这段代码打印的是 a97 。很显然,第二点的规则应用到第一个打印上了,返回的是char,第三点的规则应用到第二个打印上了,返回的是int 。但是谁会在乎这个顺序导致的打印结果,所以为了避免不必要的麻烦,很显然显式强制类型转换是个很不错的选择 -_-
1 char ch = 'a';2 int num = 0;3 boolean bool = true;4 System.out.print( bool ? (char)ch : (char)0);5 System.out.print( !bool ? (int)num : (int)ch);
还有值得注意的是 表达式1 和 表达式2 不一定非得是数据类型,还可以是自己定义的方法,只要方法有返回值就行。例如
1 static int test1(inti) {2 i += 1;3 returni;4
5 }6
7 static int test2(inti) {8 i += 2;9 returni;10 }11
12 public static voidternary() {13 boolean boo = false;14 int c = boo ? test1(1) : test2(2);15 }
以上就是个人的一点小心得~~有些内容可以参考条件表达式规范[JLS 15.25]
java 三元表达式_Java探究心得之三元运算符相关推荐
- java使用:: 表达式_Java 13:切换表达式的增强功能
java使用:: 表达式 您可能还记得我以前的文章,在Java 12中,传统的switch语句得到了增强,因此可以用作表达式. 在Java 13中,对该功能进行了进一步的更改 . break语句不能再 ...
- java使用:: 表达式_Java 12:开关表达式
java使用:: 表达式 在Java 12中,对switch语句进行了增强,以便可以将其用作表达式. 现在也可以在一种情况下打开多个常量,从而使代码更简洁易读. 这些增强功能是一种预览语言功能 ,这意 ...
- java if赋值语句_Java基础第3天+运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符)、Scanner键盘录入、if语句...
1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++ ...
- java cron表达式_Java 程序员都应该去使用一下这款强大的国产工具类库
大家好,我是你们的导师, 我会坚持每天给大家整理一些干货内容(当然周末也要允许老师休息一下哈). 今天给大家分享一个很棒的Java工具类库:Hutool.可能有很多朋友已经知道这个类库了,甚至在已经在 ...
- java规则表达式_Java基础--正则表达式的规则
注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...
- java ognl表达式_java -------ognl表达式入门
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ----------------------------------------------------------------------------- ...
- java AST 表达式_java AST JCTree简要分析
JCTree简要分析 [toc] JCAnnotatedType 被注解的泛型:(注解的Target为ElementType.TYPE_USE时可注解泛型) public static class A ...
- java 比较表达式_java学习之运算符与表达式(三)
逻辑运算符 逻辑运算即对布尔类型进行的与.或.非.异或等的运算,其运算结果仍为布尔类型. 逻辑运算符有6个:&(与).\(或).!(非).^(异或).&&(条件与).||(条件 ...
- java 自定义表达式_Java中使用Groovy实现自定义表达式解析
Groovy作为一种JVM-Based语言,目前普及程度正在提高.本文演示一下在Java类中,通过继承GDK的groovy.lang.Script类如何支持自定义表达式解析功能. 输入: 表示一行数据 ...
最新文章
- 通俗理解tf.name_scope()、tf.variable_scope()
- link 和@import 的区别?
- 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!
- python画曲线-如何通过python画loss曲线的方法
- 招聘 Java 和 前端工程师
- 树莓派Raspberry命令行配置无线网络连接
- 【转载】关于 Google Chrome 中的全屏模式和 APP 模式
- Mysql中default分区,MySQL中的分区(六)KEY分区
- dedecms怎么改php版本_php.ini配置中有3处设置不当会使网站存在安全问题
- java注释指导手册
- java 程序出现标点错误,我是学java的新手,下面代码出现报错,请问是什么原因?如何解决?...
- 如何用matlab计算不确定度,Matlab计算“间接测量物理量的不确定度”
- 神经网络matlab仿真,神经网络模型及其MATLAB仿真程序设计 周开利 等著 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
- 用python画环形图
- 学习并行计算(CUDA Python)-1-初尝试
- NovaMind *的安装、和谐破解到永久使用
- post获取网页post用法
- 使用国内镜像站下载树莓派 Raspberry Pi OS 操作系统
- 微软面试题【飞机加油问题】题解
- loss损失不下降的原因