博客
关于我
Java基础:运算符优先级
阅读量:802 次
发布时间:2023-01-29

本文共 1769 字,大约阅读时间需要 5 分钟。

Java 运算符优先级全面解析

在编程过程中,了解Java运算符的优先级至关重要。尽管Java是一个严格的面向终点语言,其运算符的优先级和执行顺序可能会对结果产生深远影响。本文将通过表格和案例详细解释Java运算符的优先级规则,帮助你在编写代码时避免常见错误。

Java 运算符优先级表

运算符类型 例子运算符 优先级 解释
高级运算符 ++ -- + ~ ! 最高 后缀递增递减运算符具有最高优先级,普通加法、减法及其运算符也不妨碍其优先顺序。
对象创建运算符 new(类型)x 次高 与并发使用的对象创建操作具有超高优先级。
算术运算符 * / % - + 算术运算符中,乘除具有更高优先级,且遵循从左到右的顺序。
大于或小于运算符 << >> >>> 左边运算符优先于右边的逻辑运算符。
比较运算符 < > <= >=instanceof` 比较运算符根据键盘切换符和等价关系解读,需注意优先级差异。
等式运算符 == != 关系运算符语句优先级根据语言关键字,需特意注意其表达式的定义方式。
按位运算符 & ^ | || 按位运算符执行顺序遵循&高于其他按位运算符的规则。
赋值运算符 = += -= *= /= %= &= ^= |= <<>= >>= >>>= ||= 最低 赋值运算符优先级最低,总是执行最后一个操作。

优先级规则

了解运算符优先级远不止掌握其顺序。以下是几个关键规则:

  • 从左到右执行:除括号外,运算符优先级高的先执行。例如,在表达式 x + y * z / 10 中,先执行 y * z,然后是 z / 10,最后执行 x + 结果。

  • 完整评估前缀或插槽式运算符:在表达式 ++a + b-- 中,++ab-- 都会被完全计算后才执行加法运算。

  • 左结合运算符:此外,大多数二元运算符是左结合的(即按顺序执行)。例如,x == y == z 被解释为 (x == y) == z

  • 括号优先级:括号中的运算优先于运算符优先级。

  • 后缀和前缀运算符的特点++-- 不是普通的前缀式运算符,它们的计算顺序可能与你预期相反。

  • 代码示例

    为了更直观地理解这些概念,我们来看看一些实际代码。

    例子一

    int x = 6, y = 7, z = 8;int r1 = x + y * z / 10;

    理解:由于乘除优先级高于加法,y * z 会先计算,然后将结果除以 10,最后再与 x 相加。因此,计算结果为 6 + (7 * 8 / 10),即 11338

    例子二

    int x = 6, y = 7, z = 8;int r2 = x + --y - ++z;

    理解:由于 ++-- 的优先级高于减法和加法,--y 会被执行为 7 - 1 = 6,而 ++z 会是 8 的值先加 1(记住这一步是真的!),结果 8 + 1 = 9。不过,在这里,z 的值会受到批评,因为 ++z 表示递增(每当读取变量 z,值会被递增)。因此,表达式最终结果为 6 + 6 - 9 = 3

    例子三

    int x = 6, y = 7, z = 8;int r3 = ++x + ++y + 5 << 1 | 2;

    理解++x++y 的优先级高于 <<+,所以它们会被先执行。表达式等价于 7 + 8 + 5 = 20,然后 20 << 1 等于 40,再用 | 2 异或,所以最终结果为 42

    例子四

    boolean x1 = false, y1 = true, z1 = false;boolean r4 = x1 == y1 == z1;

    理解:这里的运算符优先级是关键。根据语言规则,等式运算符 (==) 是左结合的,所以表达式等价于 (x1 == y1) == z1。首先检查 false == true?是的,不会,结果 r4 = false

    例子五

    int x = 6, y = 7, z = 8;int r5 = x - ++y - ++z;

    理解:同样,++ 优先级高于减法。因此,先执行 ++y 得到 7,然后再 ++z 使用 8。表达式结果为 6 - 7 - 9 = -10

    通过这些代码示例,可以清晰地看到运算符优先级如何影响最终结果。掌握这些规则是编写高效代码的关键。

    转载地址:http://foryk.baihongyu.com/

    你可能感兴趣的文章
    netty的HelloWorld演示
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty的网络框架差点让我一夜秃头,哭了
    查看>>
    Netty相关
    查看>>
    Netty简介
    查看>>
    Netty线程模型理解
    查看>>
    netty解决tcp粘包和拆包问题
    查看>>
    Netty速成:基础+入门+中级+高级+源码架构+行业应用
    查看>>
    Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
    查看>>
    netty(1):NIO 基础之三大组件和ByteBuffer
    查看>>
    Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
    查看>>
    Netty:原理架构解析
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    Network 灰鸽宝典【目录】
    查看>>
    Networkx写入Shape文件
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    network小学习
    查看>>
    Netwox网络工具使用详解
    查看>>