关于三元运算符的详细介绍

三目运算符详解

对于有些选择分支结构,可以使用简单的条件运算符来代替. 如:

if(a<b)
   min=a;
  else
   min=b;

可以用下面的条件运算符来处理

min=(a<b)?a:b;

其中"(a<b)?a:b"是一个"条件表达式",它是这样执行的: 如果a<b为真,则表达式取a值,否则取b值.

条件运算符由两个符号组成"?“和”:", 要求有3个操作对象,所以也叫它三目运算符,它是C语言中唯一的三目运算符.

它的一般形式为:

表达式1?表达式2:表达式3;

以下是关于条件运算符的几点说明:

(1) 表达式1是关系表达式或逻辑表达式,用于描述条件,表达式2和表达式3可以是常量,变量或表达式.如:

(x==y)?‘Y’:‘N’
      (d=bb-4a*c)>=0?sqrt(d):sqrt(-d)
      ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch

以上均为合法的条件表达式.

(2) 执行顺序:先求解表达式1,若值为非0,表示条件为真,则求表达式2,此时表达式2的值就作为整个条件表达式的值;

若表达式1的值为0,表示条件为假,则求解表达式3,表达式3的值就是整个条件表达式的值.例如:

(a>=0)?a:-a   执行结果是a的绝对值.

(3) 在程序中,通过把条件表达式的值直接赋予某个变量.例如:

min=(a<b)?a:b  执行结果就是将条件表达式的值赋予变量min,即将a和b二者中较小的数赋给min.

(4) 条件表达式的优先级别仅高于赋值运算符,而低于前面遇到过的所有运算符.

因此,min=(a<b)?a:b括号可以不要,可直接写成,min=a<b?a:b如果有x<y?x+1:y-1等效于x<y(x+1):(y-1)而不等效于(x<y?x+1:y)-1

(5) 条件运算符的结合方向为"自右至左".

(6) 条件表达式允许嵌套,即允许条件表达式中的表达式2和表达式3又是一个条件表达式.例如:

x>0?1:x<0?-1:0

上述条件表达式中,表达式3部分又是一个条件表达式.根据条件表达式的结合性,上述条件表达式等价于:

x>0?1:(x<0?-1:0)

其作用是判断x的符号情况.当x为正数时,该条件表达式的值为1;当x为负数时,该条件表达式的值为-1;当x为0时,该条件表达式的值为0.

(7) 条件表达式仅当if语句中内嵌的语句为赋值语句(且两个分支都给同一变量赋值)时才能代替if语句.如:

if(a%2==0)
        printf(“even/n”);
        else
        printf(“odd/n”);

不能写成:

(a%2==0)?printf(“even/n”):printf(“odd/n”);

但可以用下面语句代替:

printf("%s/n",(a%2==0?“even”:“odd”);

该语句的作用是:若 a 为偶数,输出 even;若 a 为奇数,输出odd.

(8) 表达式1,表达式2,表达式3的类型可以不同.此时条件表达式的值的类型为它们中较高的类型.例如:

main() {

char c1, ch;

ch = getchar();

c1 = ch <= ‘Z’ && ch >= ‘A’ ? ’ @ ’ : ch ;

putchar(c1);

}

该程序的作用是从键盘输入任意一个字符,判别它们是否大写字母,如果是,输出一个@;否则按原样输出 dot

上例中,程序第6行是关键语句,该语句实现输入字符的判断,选择与更换工作.

其执行过程为:先由此语句中的赋值号右侧的条件运算符对输入的字符进行判断和选择,若ch>=‘A’&&ch<='Z’成立,说明ch是大写英文字母,

此时选@;否则仍选原字符ch,然后把选择的结果赋值给原变量ch 。

Java 三元运算符是 Java 中唯一的三目运算符,也是唯一需要三个操作数的运算符,其主要用途是简化 if - else 语句,使代码更紧凑和易读[^3]。 ### 语法结构 三元运算符的基本语法为:`条件表达式 ? 表达式1 : 表达式2`。其中,`条件表达式`是一个布尔表达式,其结果为`true`或`false`;如果`条件表达式`的结果为`true`,则整个三元运算符表达式的值为`表达式1`的值;如果`条件表达式`的结果为`false`,则整个三元运算符表达式的值为`表达式2`的值[^4][^5]。 ### 示例代码 以下是使用三元运算符的示例代码: ```java public class TernaryOperatorExample { public static void main(String[] args) { int a = 10; int b = 20; // 使用三元运算符比较两个数的大小,并打印较大的数 int max = (a > b) ? a : b; System.out.println("The maximum value between a and b is: " + max); // 输出: The maximum value between a and b is: 20 // 另一个示例:根据条件打印不同的消息 boolean isRaining = false; String message = isRaining ? "Take an umbrella!" : "No need for an umbrella."; System.out.println(message); // 输出: No need for an umbrella. } } ``` ### 注意事项 - **可读性**:虽然三元运算符可以使代码更简洁,但过度使用或嵌套使用可能会降低代码的可读性。在复杂的情况下,使用 if - else 语句可能更清晰[^4]。 - **类型兼容性**:`表达式1`和`表达式2`必须是相同类型的,或者至少必须是可以隐式转换的兼容类型。否则,编译器将报错[^4]。 - **空值处理**:在使用三元运算符时,要注意空值(null)的处理,以避免`NullPointerException`[^4]。 - **逻辑正确性**:确保条件表达式逻辑正确,以避免因逻辑错误而导致的意外结果[^4]。 ### 嵌套使用 三元运算符可以嵌套使用,但通常不推荐,因为会降低代码的可读性。示例如下: ```java int score = 75; String grade = (score >= 90) ? "A" : (score >= 80) ? "B" : (score >= 70) ? "C" : (score >= 60) ? "D" : "F"; System.out.println("Grade: " + grade); // 输出: Grade: C ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值