当前位置: 首页 > 面试题库 >

Java运算符的优先级

李良策
2023-03-14
问题内容

由于Java中运算符优先级的正确性,我感到困惑。我在教程很久以前读到并具有更高的优先级高于OR,这是在提供的答案确认问题。但是,我目前正在使用《 Sun Java
6认证程序员学习指南》学习Java。本书包含以下示例:

int y = 5;
int x = 2;
if ((x > 3) && (y < 2) | doStuff()) {
    System.out.println("true");
}

我复制并引用了有关编译器如何处理上述代码的解释:

If (x > 3)true,然后是(y < 2)或结果
doStuff()true,然后打印"true"。由于存在短路&&,因此对表达式进行评估,好像周围有括号(y < 2) | doStuff()。换句话说,它被评估为之前的&&单个表达式和之后的单个表达式&&

尽管这意味着|比的优先级更高&&。是否由于使用“非短路OR”而不是短路OR?什么是真的?


问题答案:

那是因为它使用的是|运算符而不是||,它具有更高的优先级。这是桌子。

改用||运算符,它将按照您的想法进行。



 类似资料:
  • 所有的数学运算都认为是从左向右运算的, Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。 一般而言,单目运算符优先级较

  • 问题内容: 在来自http://leepoint.net/notes- java/data/expressions/precedence.html的 一个示例中 以下表达式 被评估为 然后我从http://www.roseindia.net/java/master-java/operator- precedence.shtml 看到了另一个示例 以下表达式 被评估为 我对如何确定在涉及*和/时将首

  • 从高到低顺序如下: ^ not - (一元运算) * / + - ..(字符串连接) < > <= >= ~= == and or

  • 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先乘除(模),后加减。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (

  • EL中的运算符都有不同的运算优先级,表7.5列出了EL中的运算符的优先级,上一行运算符的优先级要高于后一行的优先级。对于同一行的运算符,按着运算符在表达式中出现的顺序从左到右依次计算。 表7.5 运算符的优先级 [] . () - (一元)  not  !  empty *  /  div  %  mod +  - (二元) <  >  <=  >=  lt  gt  le  ge ==  !=

  • 通过前面的学习我们知道运算符有不同的类型,当这些不同类型的运算符出现在同一个表达式中时,就必须遵循运算符的优先级来进行运算,才能保证运算的合理性和结果的正确性、唯一性。运算符的优先级决定了表达式中各个部分执行运算的先后顺序。 下表中详细介绍了 C# 中运算符的优先级顺序: 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[整型表达式] 左到右   () 圆括号 (表