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突出显示组;)但你不会发现如果((
粗俗?是的,看起来很恶心。我可能不会在=
表达式周围使用偏执