Java 使用括号和逻辑运算符有什么区别?

Java 使用括号和逻辑运算符有什么区别?,java,logical-operators,parentheses,Java,Logical Operators,Parentheses,我得到了不同的结果:-1如果我使用括号,1如果我不使用括号 对于测试用例“30/10/2019”,如果我在下一行中使用括号,我得到-1,如果我不使用括号,得到1: else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) return 1; else if(mm==1||mm=

我得到了不同的结果:-1如果我使用括号,1如果我不使用括号

对于测试用例“30/10/2019”,如果我在下一行中使用括号,我得到-1,如果我不使用括号,得到1:

else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) return 1;
else if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12 && mm<13 && mm>0 && dd>0 && dd<32) return 1;

else如果((mm==1 | mm==3 | mm==5 | mm==7 | mm==8 | mm==10 | mm==12)&&mm0&&dd0&&dd0&&dd0&&dd0&&dd0&&dd括号决定了这些布尔值的解析顺序。并且约束比或更强。在您的情况下,要求:

mm==12 && mm<13
mm==12&&mm考虑这个例子


INTA=5;
System.out.println((a==5 | | a==10)和&a==8 | | a==9);//false
//计算结果为true&&false | | false,该值为false
System.out.println(a==5 | | a==10&&a==8 | | a==9);//true
//计算为真| |假&&false&&false
//第一个是真的,赢是因为后面跟着一个| | |所以整个
//表达式的计算结果为true。
如果使用
a和
b,则
a和
b都必须
true
才能使语句
true
使用
a | | b
时,只有
a
b
中的一个必须为
true

这也适用于分组表达式

如果一个表达式为
true
而另一个表达式为
false
,则
&
的完整表达式为
false
,而
|
的完整表达式为true。这些运算符从左到右工作,因此您需要进行适当的分组,就像算术表达式一样


最好的建议是始终使用括号来确保表达式的正确计算。

它将执行以下操作(以最高优先顺序):

  • 括号
    ()
  • 不是
  • &&
  • | |

至于另一个,它将评估
mm0&&dd>0&&dd与任何运算符
(1+2)*3==9
1+2*3==7
mm==12 && mm<13
else if((mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12) && mm<13 && mm>0 && dd>0 && dd<32) 
    return 1;
else if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12 && mm<13 && mm>0 && dd>0 && dd<32) 
    return 1;