博客
关于我
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/

    你可能感兴趣的文章
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>