三元运算符要点及实用案例

使用格式:

(条件表达式)?表达式1:表达式2;
运算规则:
a) 判断条件表达式,结果为一个布尔值。
b) true,运算结果为表达式1
c) false,运算结果为表达式2

由?:符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条件作两种处理,如果满足条件的话就执行第一个结果,如果不满足的话就执行另外一个结果,例如:
1:
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
这条语句的意思是,如果A>B的话,就将100赋给C,否则就将200赋给C。
2:
int a = 10; int b = 20;
a==b?10:20; 结果为20

在JDK1.5以前的版本中,表达式1和表达式2都要求是相同的类型,比如都是String或者char之类的,在JDK1.5以后,有了自动拆箱和装箱的原因,两者只要其中一种或者两者都能被拆箱即可,如果表达式1和表达式2的类型不相同,那么他们需要对交集类型的自动参考转换。

因为String和StringBuilder都实现了CharSequence这个接口。

确定条件表达式结果类型的规则的核心是以下3点:
  1 如果表达式1和表达式2操作数具有相同的类型,那么它就是条件表达式的类型。
  2 如果一个表达式的类型是byte、short、char类型的,而另外一个是int类型的常量表达式,且它的值可以用类型byte、short、char三者之一表示的,那么条件表达式的类型就是三者之一
  3 否则,将对操作数类型进行二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
  值得注意的是:表达式1 和 表达式2 不一定非得是数据类型,还可以是自己定义的方法,只要方法有返回值就行。
  例如:

static int test1(int i) {
        i += 1;
        return i;
    }
    static int test2(int i) {
        i += 2;
        return i;
    }
    public static void ternary() {
        boolean boo = false;
        int c = boo ? test1(1) : test2(2);
    }

案例:使用三元运算符完成月份的判断


import java.util.*;
//import java.util.*;
import java.io.*;//导包


public class JiJieGaiJin{
    public static void main(String args[]){
        while(true){
        /*    Scanner read=new Scanner(System.in);
        //String str="请输入月份";
        sop("请输入月份");
        int x=read.nextInt();*/
        panduan();
        //sop(x);
    }
    }
    public static void panduan(){
        Scanner read=new Scanner(System.in);
        //String str="请输入月份";
        sop("请输入月份");
        int x=read.nextInt();
        String str=null;
        str= (x<1|x>12)?"您的输入有误,月份不存在":(x<3|x>11)?"冬天??":x<6?"春天??":x<9?"夏天??":"秋天??";
        sop("您输入的月份是:"+x);
        sop(str);
    }   
    public static void sop(Object obj){
        
        System.out.println(obj);
         
    }
}

运行结果如下图所示:
在这里插入图片描述
注意:三元运算符的语句不能为下x<3|x=4,否则会报错,因为前者为bool类型,后者为int类型
小细节,二元运算符1<x<3,此种用法是错误的。在三元运算语句中应写为x>1&x<3。

猜你喜欢

转载自blog.csdn.net/Veer_c/article/details/104109017