• 第二章《Java程序世界初探》第8节:条件运算符


    如果程序员希望在某个条件成立的情况下由表达式1给变量a赋值,而在条件不成立的情况下由表达式2给变量a赋值,就可以用if...else结构完成这个操作:

    1. if(条件){
    2.     a = 表达式1;
    3. }else{
    4.     a = 表达式2;
    5. }

    其实,Java语言中有一个运算符也能实现与以上代码同样的效果,这个运算符就是条件运算符。条件运算符的写法是?:,它是Java语言中唯一一个三目运算符,需要三个操作数。条件运算符在程序中都是以如下格式出现:

    条件?表达式1:表达式2

    这个格式被称为条件表达式。在此格式中,问号前面的条件以及冒号两侧的表达式1和表达式2都是条件运算符的操作数。为了方便表述,把此格式中表达式1的运算结果称为“结果1”,把表达式2的运算结果称为“结果2”。

    如果问号前面的条件成立,则以冒号左边的“结果1”作为条件表达式的最终运算结果,而条件不成立则以冒号右边的“结果2”作为条件表达式的最终运算结果。因此,使用条件表达式来实现本小节开头提到的编码需求,程序可以写为:

    a = 条件?表达式1:表达式2;

    不难看出,条件表达式就是一个简化版的if...else结构。之所以说它是“简化版”,不仅仅是因为它写法简单,同时也因为它能实现的功能也比if...else结构简单。if...else结构在条件成立或不成立的情况下,都可以执行很多复杂的操作。而条件表达式仅能根据条件是否成立在表达式1和2中完成“二选一”的操作,因此条件运算符不能完全代替if...else结构,它只是一个简化版的if...else。

    使用条件表达式在很多情况下都可以简化代码的编写。下面就来看两个条件表达式的经典应用:

    【例02_07 判断数字奇偶性】

    Exam02_07.java

    1. import java.util.Scanner;
    2. public class Exam02_07 {
    3. public static void main(String[] args) {
    4. int x;
    5. Scanner sc = new Scanner(System.in);
    6. System.out.println("请输入一个整数:");
    7. x = sc.nextInt();
    8. //使用条件运算符判断数字的奇偶性
    9. System.out.println("所输入整数" + x + "是" + (x % 2 == 0 ? "偶数" : "奇数"));// ①
    10. }
    11. }

    在【例02_07】的语句①中,以“x%2==0”作为条件来判断变量x是否为偶数,程序运行结果如图2-13所示。

     图2-13 【例02_07】运行结果

    【例02_08 求绝对值】

    Exam02_08.java

    1. import java.util.Scanner;
    2. public class Exam02_08 {
    3. public static void main(String[] args) {
    4. int x;
    5. Scanner sc = new Scanner(System.in);
    6. System.out.println("请输入一个整数:");
    7. x = sc.nextInt();
    8. //使用条件运算符计算x的绝对值
    9. System.out.println(x + "的绝对值是" + (x >= 0 ? x : -x));// ①
    10. }
    11. }

    在【例02_08】的语句①中,以“x>=0”作为判断条件,如果x为非负数,那么x的绝对值就是它自身,否则,x为负数,其绝对值为x的相反数,即-x,程序运行结果如图2-14所示。

    图2-14 【例02_08】运行结果

    通过以上两个例子不难看出,如果只是从两个表达式中进行“二选一”的操作,使用条件表达式要比if...else结构更加简洁。

    初学Java的读者在使用条件运算符的时候还需要注意一个细节,那就是:一旦“结果1”和“结果2”的数据精度不同,则虚拟机会按照“向高看齐”的原则自动提升“结果1”与“结果2”中精度较低者的数据类型,例如:

    1. int  x=4;
    2. System.out.println(x>4? 99.9+1 : 9+1);

    在以上代码中,表达式1为“99.9+1”,因此“结果1”为double型数据。表达式2为“9+1”,因此“结果2”为int型。条件“x>4”不成立,所以条件表达式以“结果2”(也即10)作为最终运算结果。但相较于“结果1”而言,“结果2”精度的精度较低,此时虚拟机会按照“向高看齐”的原则,自动把原来“结果2”的值10从int型转换成double型,因此程序最终的输出结果为10.0,各位读者可以自行验证该结论的正确性。

    除阅读文章外,各位小伙伴还可以点击这里观看我在本站的视频课程学习Java!

  • 相关阅读:
    SQL查找每个城市购买金额排名第二的用户,列出其购买城市、姓名、购买金额(排序函数)
    常用的数据结构及算法
    Vue3中props和defineEmit的区别
    智慧公厕厂家,解读智慧厕所的全面功能应用
    双目视觉实战---三维重建基础与极几何
    Linux线程私有数据Thread-specific Data(TSD) 详解
    2023年4月到7月工作经历
    聊一聊Spring 事务的相关操作
    配置Jenkins
    公网IP怎么设置?公网ip有哪些优点和缺点?
  • 原文地址:https://blog.csdn.net/shalimu/article/details/127996610