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

    你可能感兴趣的文章
    NLP 时事和见解【2023】
    查看>>
    NLP 模型中的偏差和公平性检测
    查看>>
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP、CV 很难入门?IBM 数据科学家带你梳理
    查看>>
    NLP三大特征抽取器:CNN、RNN与Transformer全面解析
    查看>>
    NLP入门(六)pyltp的介绍与使用
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:从头开始的文本矢量化方法
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    NLTK - 停用词下载
    查看>>
    nmap 使用总结
    查看>>
    nmap 使用方法详细介绍
    查看>>