如何阅读以下内容;如果;语句以及在JAVA中确定优先级的规则是什么?

如何阅读以下内容;如果;语句以及在JAVA中确定优先级的规则是什么?,java,if-statement,Java,If Statement,我刚刚意识到,我在理解编程语言中最基本的原则之一时遇到了问题,那就是如何在给定一些布尔值和运算符(如&、&、|、|、| |)的情况下计算“if”语句如何执行,而不将它们括在括号中 我想知道是否有人能告诉我JVM是如何看待下面的“if”语句的 if( true || false & true && false | false ) ; 我对得到的布尔值不感兴趣,而是对上面的“if”语句如果用括号括起来会是什么样子感兴趣。在您的示例中 if( true || 将被忽略,因为

我刚刚意识到,我在理解编程语言中最基本的原则之一时遇到了问题,那就是如何在给定一些布尔值和运算符(如&、&、|、|、| |)的情况下计算“if”语句如何执行,而不将它们括在括号中

我想知道是否有人能告诉我JVM是如何看待下面的“if”语句的

if( true || false & true && false | false ) ;

我对得到的布尔值不感兴趣,而是对上面的“if”语句如果用括号括起来会是什么样子感兴趣。

在您的示例中

if( true ||

将被忽略,因为在Java中,一个布尔表达式将在知道结果后立即终止。由于
true | |任何
都始终是
true
,因此表达式的其余部分不会计算。

在您的示例中

if( true ||
将被忽略,因为在Java中,一个布尔表达式将在知道结果后立即终止。由于
true | |任何
都始终是
true
,因此表达式的其余部分不会计算。

这与此相同(我添加了额外的括号以显示优先级)

有关运算符优先级的表,请参见此处

虽然它确实有效,但我决不会对布尔值使用|或&(它们是位运算符)。

这与此相同(我添加了额外的括号以显示优先级)

有关运算符优先级的表,请参见此处

虽然它确实有效,但我决不会对布尔值使用|或&(它们是位运算符)。

说明如下:

& precedes |
| precedes &&
&& precedes ||
因此,您的if语句的计算方式如下:

1. if (true || false && false) // false & true = false
2. if (true || false)          // false | false = false
3. if (true)                   // true || false = true
您还应该知道,在第一步之后,Java将停止计算条件表达式,因为存在
true
或其他内容。一个
true
就足以使整个表达式
true
,因为它后面紧跟着(逻辑)或。

状态如下:

& precedes |
| precedes &&
&& precedes ||
因此,您的if语句的计算方式如下:

1. if (true || false && false) // false & true = false
2. if (true || false)          // false | false = false
3. if (true)                   // true || false = true

您还应该知道,在第一步之后,Java将停止计算条件表达式,因为存在
true
或其他内容。一个
true
就足以使整个表达式
true
,因为它后面紧跟着(逻辑)OR。

编译器将忽略
false&true&&false&false
并将其标记为死码,因为在
true |
之后无法到达它。但是,如果编译器在编译时不知道这些值,它的工作方式如下:

1. if (true || false && false) // false & true = false
2. if (true || false)          // false | false = false
3. if (true)                   // true || false = true
  • false&true->
    if(true | | false&false | false)
  • false | false->
    if(true | false&&false)
  • false&&false->
    if(true | | false)
  • 真| |假->

  • 编译器将忽略
    false&true&&false | false
    并将其标记为死码,因为在
    true |
    之后无法访问它。但是,如果编译器在编译时不知道这些值,它的工作方式如下:

    1. if (true || false && false) // false & true = false
    2. if (true || false)          // false | false = false
    3. if (true)                   // true || false = true
    
  • false&true->
    if(true | | false&false | false)
  • false | false->
    if(true | false&&false)
  • false&&false->
    if(true | | false)
  • 真| |假->

  • 上面的if语句一旦遇到
    true | |
    将停止求值,之后的任何内容都将被跳过,因为满足了
    if语句的
    true
    属性

    运算符优先级顺序描述为
    &&
    |
    之前,因此您可以设计语句的逻辑

    if( true || false & true && false | false ) ;
    
    为了简化,您的if语句将按如下方式执行:

    if ( true || ((false & true) && (false | false)) )
    

    您可以在这里获得有关Java中运算符优先级表的更多信息:

    上面的if语句在遇到
    true |
    时将停止求值,之后的任何内容都将被跳过,因为
    if语句的
    true
    属性已满足

    运算符优先级顺序描述为
    &&
    |
    之前,因此您可以设计语句的逻辑

    if( true || false & true && false | false ) ;
    
    为了简化,您的if语句将按如下方式执行:

    if ( true || ((false & true) && (false | false)) )
    

    您可以在这里获得有关Java中运算符优先级表的更多信息:

    对于优先级,谷歌搜索“Java运算符优先级”,有很多链接告诉您JVM会像这样查看if语句:if(true或),然后它会忽略其余语句,因为它总是true。对于优先级,谷歌搜索“Java运算符优先级”,有很多链接告诉你JVM是这样看待if语句的:if(true OR)然后忽略其余的,因为它总是正确的。。。这被称为短路评估只是一个旁注:只有当你使用短路或
    |
    如果你只使用一个
    |
    它仍然会评估另一半,结果将不会受到影响。只是为了让他知道要查找的术语。。。这被称为短路评估只是一个旁注:只有当您使用短路或
    |
    时,它才会在
    true
    之后停止评估。如果您只使用
    |
    它仍然会评估另一半,结果不会受到影响。但是,如果我说if(真|假|真&&false |假)我看起来怎么样?谢谢。一样。使用“或”,如果任何表达式的计算结果为true,则答案是已知的,因此跳过其他所有内容。使用“and”时,所有表达式都必须求值,直到其中一个为false。如果我说if(true | | false | | | | true&&false | | | false)会是什么样子呢?谢谢。相同。使用“或”,如果任何表达式的计算结果为true,则答案是已知的,因此跳过其他所有内容。使用“and”时,必须对所有表达式求值,直到其中一个表达式为false