[Java · 初窥门径] 运算符 — 运算符的优先级

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册

0x01:运算符的优先级 — 概览

在前面的学习中,我们已经掌握了多种运算符的使用方法。可是,当多种运算符同时出现在一个表达式中时,如何确定它们的执行顺序呢?

与数学中的 ”先乘除后加减“ 规则类似,Java 也为所有运算符定义了明确的 优先级体系。 这种优先级决定了不同运算符在混合运算中的执行顺序:

  1. 高优先级运算符 优先计算(如 () 括号中的内容)。

  2. 同优先级运算符 按结合方向顺序计算(如多数运算符从左到右,赋值运算符从右到左)。

  3. 低优先级运算符 最后计算(如 + 法、逻辑运算符)。


Java 中的运算符优先级如下表所示(不用死记,了解即可,实际编程中,以 () 来包裹你想先计算的内容即可):

优先级运算符说明结合性
1()括号运算符从左至右
2!+(正号)、-(负号)一元运算符从左至右
2~位逻辑运算符从左至右
2++--递增与递减运算符从左至右
3*/%算数运算符从左至右
4+-算数运算符从左至右
5<<>>位左移、右移运算符从左至右
6>>=<<=关系运算符从左至右
7==!=关系运算符从左至右
8&位运算符、逻辑运算符从左至右
9^位运算符、逻辑运算符从左至右
10|位运算符、逻辑运算符从左至右
11&&逻辑运算符从左至右
12||逻辑运算符从左至右
13? :条件运算符从右至左
14=+=-=*=/=%=赋值运算符、扩展赋值运算符从右至左

0x02:运算符的优先级 — 演示

实战中我们不用记忆那么多的优先级,不确定优先级的拿小括号括起来即可。不过为了内容的完整性,笔者决定还是举一个小小的例子来看一下优先级的影响,看下面这个算式,问结果是多少:

int num1 = 1;  
boolean result;    // 用来存放最终的计算结果  
result = ++num1 + 2 * num1-- >= 3 && 1 + 3 * 2 == 8 || num1++ <= 1;

上面这个算式看着就烦,我们先找出优先级最高的进行一轮简化,对照表格,优先计算 ”递增与递减“,简化后的 1.0 为(笔者直接拿数字做代替了):

result = 2 + 2 * 2 >= 3 && 1 + 3 * 2 == 8 || 1 <= 1;

继续,发现表达式中的 * 法优先级最高,简化后的 2.0 如下:

result = 2 + 4 >= 3 && 1 + 6 == 8 || 1 <= 1;

继续,发现算数运算符 + 法优先级最高,简化后的 3.0 如下:

result = 6 >= 3 && 7 == 8 || 1 <= 1;

继续,发现关系运算符 >= & <= 优先级最高,简化后的 4.0 如下:

result = true && 7 == 8 || true;

继续,发现关系运算符 == 优先级最高,简化后的 5.0 如下:

result = true && false || true;

继续,发现关系运算符 && 优先级最高,简化后的 6.0 如下:

result = false || true;

所以,最终结果为 true。代码示例如下:

public class TestVar {
    public static void main(String[] args) {
        int num1 = 1;
        boolean result;    // 用来存放最终的计算结果
        result = ++num1 + 2 * num1-- >= 3 && 1 + 3 * 2 == 8;
        System.out.println(result);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue17 :: Hack3rX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值