Java If and Or语句

Java If and Or语句,java,if-statement,Java,If Statement,下面的语句没有任何问题,但请有人解释一下为什么,我觉得在&&之前应该有一组额外的括号?然而,即使缺少(),它仍然可以工作 if(returnt.getInt("date", iLoop) == Util.getBusinessDate() && returnt.getInt("ins_type", iLoop) == Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO") || returnt.g

下面的语句没有任何问题,但请有人解释一下为什么,我觉得在
&&
之前应该有一组额外的括号?然而,即使缺少
()
,它仍然可以工作

if(returnt.getInt("date", iLoop) == Util.getBusinessDate()
     && returnt.getInt("ins_type", iLoop) == Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO")
     || returnt.getInt("ins_type", iLoop) == Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, " DEPO2"))
{...}

简而言之,你的陈述是这样的

if (A && B || C) {


1 1 1 => true
0 1 1 => true
0 0 1 => true
1 1 0 => false
&&binds比“| |”更难,因此首先计算它

如果将括号设置为

if ((A && B) || C) {
if (A && (B || C)) {

1 1 1 => true
0 1 1 => false
0 0 1 => false
1 1 0 => true
结果是一样的。首先计算括号内的表达式(A和B),然后将结果与C进行比较

如果你像这样设置括号

if ((A && B) || C) {
if (A && (B || C)) {

1 1 1 => true
0 1 1 => false
0 0 1 => false
1 1 0 => true
在这种情况下,首先计算括号B | | C中的表达式,然后计算&&


所以。。。这取决于你想表达/检查什么?

简而言之,你的陈述是什么样的

if (A && B || C) {


1 1 1 => true
0 1 1 => true
0 0 1 => true
1 1 0 => false
&&binds比“| |”更难,因此首先计算它

如果将括号设置为

if ((A && B) || C) {
if (A && (B || C)) {

1 1 1 => true
0 1 1 => false
0 0 1 => false
1 1 0 => true
结果是一样的。首先计算括号内的表达式(A和B),然后将结果与C进行比较

如果你像这样设置括号

if ((A && B) || C) {
if (A && (B || C)) {

1 1 1 => true
0 1 1 => false
0 0 1 => false
1 1 0 => true
在这种情况下,首先计算括号B | | C中的表达式,然后计算&&


所以。。。这取决于您想表达/检查什么?

您认为必要的额外括号,这些括号由Java隐式声明;)

您认为必要的额外括号,由Java隐式声明;)

我以前的大学教授常说,多余的括号是给吃乳蛋饼的人和女孩的,这可能有点不恰当

背诵运算符优先级表。您的代码相当于

if (((returnt.getInt("date", iLoop) == Util.getBusinessDate())
    && (returnt.getInt("ins_type", iLoop) == Ref.getValue(
      SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO")))
      || (returnt.getInt("ins_type", iLoop) == Ref.getValue(
        SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, " DEPO2"))) {
i、 e.
=
首先计算,然后是
&&
,然后是
|
。请注意,后两个是短圆圈,因此一旦知道结果,评估就会停止


随着你越来越有经验,你会发现我粘贴的版本更难阅读。

我的大学老教授曾经说过,可能有点不恰当,多余的括号是给吃乳蛋饼的人和女孩的

背诵运算符优先级表。您的代码相当于

if (((returnt.getInt("date", iLoop) == Util.getBusinessDate())
    && (returnt.getInt("ins_type", iLoop) == Ref.getValue(
      SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO")))
      || (returnt.getInt("ins_type", iLoop) == Ref.getValue(
        SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, " DEPO2"))) {
i、 e.
=
首先计算,然后是
&&
,然后是
|
。请注意,后两个是短圆圈,因此一旦知道结果,评估就会停止


随着你经验的增加,你会发现我粘贴的版本更难阅读。

因为
=
的优先级高于
&
因为
=
的优先级高于
&
,所以让我们把它分解一下

int val1 = returnt.getInt("date", iLoop);
int val2 = Util.getBusinessDate();
int val3 = returnt.getInt("ins_type", iLoop);
int val4 = Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO");
int val5 = returnt.getInt("ins_type", iLoop);
int val6 = Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, " DEPO2");

if (val1 == val2 && val3 == val4 || val5 == val6) {.........
因此编译器会比较前两个,即

val1 == val2
如果且仅当(因为&&)这是真的,它将转到下一部分

val3 == val4 || val5 == val6 
这意味着如果两个检查中的任何一个返回true,那么if语句将为true

编译器会将检查分解成这样的部分,您只需添加括号即可使其更具可读性。

因此,让我们将其分解

int val1 = returnt.getInt("date", iLoop);
int val2 = Util.getBusinessDate();
int val3 = returnt.getInt("ins_type", iLoop);
int val4 = Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, "DEPO");
int val5 = returnt.getInt("ins_type", iLoop);
int val6 = Ref.getValue(SHM_USR_TABLES_ENUM.INSTRUMENTS_TABLE, " DEPO2");

if (val1 == val2 && val3 == val4 || val5 == val6) {.........
因此编译器会比较前两个,即

val1 == val2
如果且仅当(因为&&)这是真的,它将转到下一部分

val3 == val4 || val5 == val6 
这意味着如果两个检查中的任何一个返回true,那么if语句将为true



编译器会将检查分解成这样的部分,您只需添加括号即可使其更具可读性。

您认为正在进行什么检查?逻辑AND运算符的优先级高于逻辑OR运算符。优先级决定了表达式的顺序项。您认为正在进行什么检查?逻辑“与”运算符的优先级高于逻辑“或”运算符的优先级。优先级决定了表达式中的术语的求值顺序。这甚至不相关,问题是关于
&
|
的。他想在
&
前面加括号。他想要这些括号的唯一情况是,他不明白==高于&&这甚至不相关,问题是关于
&&
|
。他想把括号放在
&
之前。只有在他不明白==高于&&0&&0=>0的情况下,他才会想要这些括号。那么0 | | 1是1?啊,是的,你是对的。我脑子里乱七八糟的。我的坏朋友。:)0 && 0 => 0. 那么0 | | 1是1?啊,是的,你是对的。我脑子里乱七八糟的。我的坏朋友。:)“您会发现我粘贴的版本更难阅读”-如果您添加一些空白并使用intendation突出显示组,则不会如此;)但是你不觉得
如果(((
粗俗?是的,看起来很恶心。不过我可能不会在
=
表达式周围使用偏执,因为它们在大多数情况下都是可以理解的。更可能的是,开发人员在
&
前面的
&
上有更多的问题,所以你可以在那里使用偏执。我唯一允许多余括号的地方是在三元条件下al(它的优先级似乎总是出人意料地低),如果是在非数学代码中,可能模数
%
。如果我在1971年,我会把
放在
*
/
%
。嗯,那可能是风格上的不同;)-我更喜欢
(a和B)|(C和d)
A&B | | | | C&D
上的
,尤其是在较长的语句上,最有可能在
| |
之前或之后有换行符。毕竟,这是为了减少误解的风险,从而引入微妙的错误,但这当然取决于编写代码的人员。“你会发现我粘贴的版本更难阅读”-如果你添加一些空格并使用intendation突出显示组;)但你不会发现
如果((
粗俗?是的,看起来很恶心。我可能不会在
=
表达式周围使用偏执