导读:本期聚焦于小伙伴创作的《Java运算符优先级总记混?这份完整表格和记忆技巧帮你一次搞懂》,敬请观看详情。写完Java表达式却得到意外结果,多半是运算符优先级理解有偏差。Java规定了二十余类运算符的求值顺序,例如后缀运算先于前缀,算术乘除法高于加减,逻辑与高于或,赋值级别最低。本文整理一份覆盖所有分类的完整优先级表格,并给出几条实用记忆规律,比如单目优于双目、算数优于移位、比较优于逻辑。配合典型易错代码片段解析,能帮助你在编码时快速判断执行次序,减少因括号遗漏导致的逻辑错误。

在Java编程中,表达式的求值顺序由语言规范定义的运算符优先级决定。当一行代码里同时出现多种运算符时,编译器严格按照优先级从高到低结合,而不是简单地从左到右执行。理解这套规则,是写出正确且易读代码的基础。

Java运算符优先级总记混?这份完整表格和记忆技巧帮你一次搞懂

一、Java运算符优先级完整表格

下面这张表格列出了Java中所有主要运算符类别,并按照优先级从高到低排列。优先级数值越小,表示结合得越紧密、越早被求值。同一行内的运算符优先级相同,通常从右向左或从左向右结合取决于具体运算符。

优先级运算符类别具体运算符结合性
1后缀expr++ , expr--左到右
2一元(前缀)++expr , --expr , + , - , ~ , !右到左
3乘性* , / , %左到右
4加性+ , -左到右
5移位<< , >> , >>>左到右
6关系< , > , <= , >= , instanceof左到右
7相等== , !=左到右
8按位与&左到右
9按位异或^左到右
10按位或|左到右
11逻辑与&&左到右
12逻辑或||左到右
13三元条件? :右到左
14赋值= , += , -= , *= , /= , %= , &= , ^= , |= , <<= , >>= , >>>=右到左

从表中可以看出,后缀自增自减优先级最高,意味着它们会先于周边其他运算发生。赋值类运算符永远处于最底层,所以像 a = b + c 这样的语句一定是先算出右边加法结果,再执行赋值。

需要特别留意的是,逻辑与 && 和逻辑或 || 低于位运算符,且具备短路特性。很多初学者误以为 &&& 只是写法不同,实际上前者是位运算或非负短路的布尔运算,优先级还更高,混用会导致条件判断逻辑偏离预期。

二、容易踩坑的优先级误区

即便看过表格,实际写代码时仍常掉进几个典型陷阱。例如算术运算符和移位运算符相邻时,加号减号优先级高于左右移,这和反直觉的“移位很底层”感觉相反。还有相等判断和逻辑运算混用时,== 优先于 &&,但低于算术运算。

看下面这段有问题的代码:

public class PriorityTrap {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;
        // 本意是先比较大小再逻辑与,但+优先级高于>,导致先加后比
        if (a + 5 > b && a < 10) {
            System.out.println("条件成立");
        } else {
            System.out.println("条件不成立");
        }
        // 实际等价于 (a+5)>b 且 a<10
        // 若想表达 a+(5>b && a<10) 则必须加括号
    }
}

上面例子中,因为 +> 优先级高,所以 a + 5 > b 会先完成加法再比较,和某些开发者以为的“先判断5是否大于b”完全不同。这种错误在复杂表达式里极难肉眼排查。

另一个常见错误是把赋值当成一个低优先级但可随意嵌套的操作。由于赋值结合性是右到左,连续赋值 x = y = 0 实际是 x = (y = 0),这虽然合法,但如果和三元运算符混写,例如 a = b > 0 ? c = 1 : c = 2,在Java中会因优先级问题直接编译报错,必须给三元分支加括号。

三、实用记忆技巧

死记硬背表格效率很低,可以用几条口语化规律覆盖绝大多数场景。第一条:单目运算符最优。无论是 ++-- 还是逻辑非 !,都紧挨变量,优先于任何双目符号。第二条:算术胜过移位,移位胜过关系。也就是先算加减乘除,再移比特,再比大小。第三条:比较完再逻辑,与比或高,赋值垫底。

把规律串成一句顺口溜:单目算术移关系,相等位逻与或条,赋值最后莫心急。其中“条”指三元条件运算符。每天写代码前在心里过一遍,比翻表格快得多。

此外,当表达式长度超过屏幕半行,或者混合了三类以上运算符,不要依赖记忆,直接加括号。括号不仅能强制顺序,更是给后续维护者最清晰的注释。例如下面改写就一目了然:

public class ClearExpr {
    public static void main(String[] args) {
        int x = 3, y = 7, z = 2;
        // 不加括号易误读,加上后语义清晰
        boolean result = ((x + y) > (z << 2)) && (y % 2 == 1);
        System.out.println(result);
    }
}

这个例子里,我们先用括号锁定算术和移位比较,再包裹逻辑与,任何人读代码都不会纠结优先级。记住,编译器不嫌括号多,人脑才需要减负。

四、结合代码验证你的理解

建议动手跑几个小程序来固化认知。比如利用自增和逻辑非组合,观察输出顺序;或者故意写错优先级再看加括号后的修正效果。只有从运行结果反推结合过程,才算真正掌握。

下面给出一个综合练习,你可以先心算结果再运行核对:

public class Practice {
    public static void main(String[] args) {
        int i = 2;
        int j = 3;
        // 三元、赋值、算术混合
        int k = i++ + j > 4 ? i + j : i * j;
        System.out.println("i=" + i + ", j=" + j + ", k=" + k);
        // 拆解:i++先用2再加,2+3=5>4成立,此时i已是3,三元取i+j即3+3=6
    }
}

运行后会发现 i 变成3,k 得到6。如果之前猜错,说明对后缀自增和三元运算符优先级还不够敏感。多写几组类似练习,运算符优先级就会从文档知识变成肌肉记忆。

Java运算符优先级运算符表格优先级记忆技巧修改时间:2026-08-02 13:39:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。