Java 实例 - 三目条件运算符

本文深入探讨了三目条件运算符在编程中的应用,通过多个示例解释了其语法和用法,包括数字比较、字符串比较、赋值及方法调用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >







三目/三元/条件运算符


三目条件运算符,也称为条件运算符三元运算符,是一种在编程中常用的简单条件判断工具。这个运算符由三个操作数组成,因此被称为“三目”。它的基本形式如下:

  • 公式: 表达式 ? 表达式1 : 表达式2

  • 含义:
    当表达式的结果为 true 的时候,则执行表达式1
    当表达式的结果为 false 的时候,则执行表达式2


条件:即公式问号(?)左边的表达式,这是一个布尔表达式,它必须返回一个真值(true)或假值(false);

表达式1:如果条件为真 (true),则执行并返回此表达式的值。
表达式2:如果条件为假 (false),则执行并返回此表达式的值。

注:表达式1和表达式2的结果类型需要一致



以下是使用三目条件运算符的一些示例[5]:



示例 1:简单的数字比较



int a = 200;
int b = 150;
String result = a > b ? "小故重" : "小屿重";
// 打印:200
System.out.println(result);



示例 2:字符串比较



String str1 = "gu";
String str2 = "yu";
String greeting = (str1.equals(str2)) ? "Both strings are equal" : "Strings are not equal";
// 打印:Strings are not equal
System.out.println(greeting);  

  • 如上示例中,str1 和 str2 分别被初始化为字符串 “gu” 和 “yu”。接着,使用三目条件运算符(也叫做三元运算符)来检查这两个字符串是否相等。由于 “gu” 并不等于 “yu”,所以条件 str1.equals(str2) 的结果为 false。
  • 因此,表达式 (str1.equals(str2)) ? “Both strings are equal” : “Strings are not equal” 的结果是 “Strings are not equal”,因为当条件为 false 时,会执行冒号(:)后面的表达式。


示例 3:在赋值中使用



int score = 85;
String grade = (score >= 90) ? "A" : 
             (score >= 80) ? "B" : 
             (score >= 70) ? "C" : 
             (score >= 60) ? "D" : "F";
// 打印:Grade: B
System.out.println("Grade: " + grade);



示例 4:在方法调用中使用



public static String getGreeting(boolean isMorning) {
    return isMorning ? "Good morning!" : "Good afternoon!";
}

public static void main(String[] args) {
    boolean isMorning = true;
    // 打印:Good morning!
    System.out.println(getGreeting(isMorning));
}




巩固示例



package guyu.day0903;

/**
 * @Author: guyu
 * @Date: 2020/9/3 10:59
 */
public class Demo01 {
    public static void main(String[] args) {

        /**
         * 三目条件运算符其语法: x ? y : z
         * 其中 x 为 boolean 类型表达式,先计算 x 的值,
         * 若为true,则整个三目运算的结果为表达式 y 的值,
         * 否则整个运算结果为表达式 z 的值。
         */
        int a , b;
        a = 10;

        // 如果 a 等于 1 成立,则设置 b 为20,否则为30
        b = (a == 1) ? 20 : 30;
        // 输出:b = 30
        System.out.println("b = " + b);

        // 如果 a 等于 10 成立,则设置 b 为20,否则为30
        b = (a == 10) ? 20 : 30;
        // 输出:b = 20
        System.out.println("b = " + b);

    }
}




如上示例 [5] 都展示了三目条件运算符在不同场景中的用法。它提供了一种简洁的方式来执行简单的条件判断,并返回相应的值。在 Java 中使用其它运算符详情见:Java 运算符









故屿γ

Note:
欢迎转载,请在文章页面明显位置给出原文链接,否则保留追究法律责任的权利;
最后,感谢您在茫茫人海中阅读了我的文章。
没有个性 哪来的签名!
详情请关注点我
持续更新中

### Java 三目运算符拆箱导致空指针异常解决方案 当在 Java 中使用三目运算符时,如果条件的结果可能是 `null` 并且涉及到自动拆箱操作,则可能会触发空指针异常。为了避免这种情况的发生,可以采取以下几种方法来确保程序的安全性和稳定性。 #### 方法一:避免返回 `null` 通过调整逻辑使三目运算符不会返回 `null` 值,从而防止潜在的拆箱问题: ```java Integer result = condition ? (value != null ? value : defaultValue) : anotherValue; ``` 这种方法确保即使原始值为 `null`,也会被替换为默认值,进而规避了因拆箱而产生的风险[^1]。 #### 方法二:显式指定目标类型 对于那些可能导致不同类型的对象参与比较的情况,在定义变量时应尽可能地明确其具体的数据类型,而不是依赖于隐式的类型转换机制: ```java // 不推荐的做法 int result = condition ? Integer.valueOf(123) : null; // 可能抛出 NullPointerException // 推荐做法 Integer safeResult = condition ? Integer.valueOf(123) : null; if(safeResult != null){ int usedValue = safeResult.intValue(); } ``` 这里展示了如何先判断是否为空再执行必要的拆箱动作,以此方式绕过了直接对可能为 `null` 的包装器调用基本数据类型的成员函数所引起的隐患。 #### 方法三:利用 Optional 类处理可选值 自 JDK8 起引入了 `Optional<T>` 来表示可能存在也可能不存在的对象实例。借助它能够更优雅地管理含有不确定性的属性,并减少由于意外访问到 `null` 所带来的麻烦: ```java import java.util.Optional; public class Example { public static void main(String[] args) { Boolean flag = true; Optional<Integer> optInt = Optional.ofNullable(flag ? getSomeNumber() : null); System.out.println(optInt.orElse(-1)); // 当optInt为空时提供一个替代数值 // 或者配合map进行进一步的操作 String strRep = optInt.map(i -> i.toString()).orElse("default"); System.out.println(strRep); } private static Integer getSomeNumber(){ return Math.toIntExact((long)(Math.random()*10)); } } ``` 上述代码片段中,无论给定条件下计算出来的整数是否存在,都能安全地获取并打印相应的字符串形式;同时针对缺失情况提供了合理的备选项[-1 和 "default"]作为输出结果的一部分[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值