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