真正理解三元表达式

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

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

  三元运算符用于判断,其等价的if-else语句如下所示:
 boolean a; //声明boolean变量
 if(20<45) //将20<45作为判断条件
   a = true; //条件成立将true赋值给a
 else
   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<short<char<int<float<double。下面用一段代码来解释上述的三条规则,以下测试代码也涵盖了很多面试题目,希望各位可以从中理解上述三条规则。

  char a='a';
    int i=96;
  //规则1,定义了数据类型的变量与未定义变量的数值,结果自动转换为精度高的
  System.out.println(2==2?i:9.0); 
  //jvm给数值分配的数据类型,98并不是int类型的,而是byte/short,故结果会变为ASCII码98对应的字符
  System.out.println(2==2?98:a); 
  //规则2,两个已经定义数据类型的变量,结果自动转换为精度高的
  System.out.println(2==2?a:i);
  //规则3,两个未定义的数值,结果自动转换为精度高的
  System.out.println(2==2?99:9.0);
  System.out.println(2==2?99:'b');

  上述代码的执行结果为:  96.0
               b
               97
               99.0
               c

  大家可以参阅上述代码与结果理解三元运算符的双目数值提升问题;

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,可以使用:class指令来动态地添加或移除HTML元素的class。:class指令可以与三元表达式结合使用,以根据条件来动态设置不同的class。有两种常见的方式来使用:class三元表达式。 第一种方式是在固定类名和动态类名的三元表达式之间加一个空格字符串,代码示例如下: :class="'固定类名' + ' ' + (动态类名的三元表达式)" 第二种方式是在固定类名的后面加一个空格,代码示例如下: :class="'固定类名 ' + (动态类名的三元表达式)" 需要注意的是,在使用:class指令时,冒号要放在class前面;同时,引号的使用要遵循外双里单或外单里双的原则,比如外面使用双引号,里面的字符串就要使用单引号。 举个例子来说明:class三元表达式的用法。假设有一个HTML元素,其中有一个固定的class名为"role",还有一个动态的class名为"selectedRole",我们可以使用三元表达式判断是否显示该动态class名,代码示例如下: :class="'role ' + (selectedRole ? 'selectedRole' : '')" 在以上代码中,如果selectedRole为true,则会添加"selectedRole"这个class名;如果selectedRole为false,则不会添加该class名。 总结起来,class三元表达式的使用方法是在:class指令中,通过在固定类名和动态类名的三元表达式之间加空格字符串或在固定类名的后面加空格来实现动态设置class。同时要注意冒号的位置和引号的使用规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值