Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是避免短路评估的好方法吗?_Java_Short Circuiting - Fatal编程技术网

Java 这是避免短路评估的好方法吗?

Java 这是避免短路评估的好方法吗?,java,short-circuiting,Java,Short Circuiting,我是编程新手,最近一直在自学Java。在我学习的过程中,我遇到了一个问题,希望我能找到一种避免短路评估的方法。我提出了两个解决方案,要么维持SCE,要么破坏SCE。我想知道在实际工作中哪一个答案更可取 我首先尝试将int变量的计算与逻辑运算符分离。虽然它可以工作并维护SCE,但我想减少编码的行数。所以我想出了一个代码,它比较短,但是打破了SCE //给定问题 int n1 = 0, n2 = 0; boolean result = ((n1 += 10) < 0) && (

我是编程新手,最近一直在自学Java。在我学习的过程中,我遇到了一个问题,希望我能找到一种避免短路评估的方法。我提出了两个解决方案,要么维持SCE,要么破坏SCE。我想知道在实际工作中哪一个答案更可取

我首先尝试将int变量的计算与逻辑运算符分离。虽然它可以工作并维护SCE,但我想减少编码的行数。所以我想出了一个代码,它比较短,但是打破了SCE

//给定问题

int n1 = 0, n2 = 0;
boolean result = ((n1 += 10) < 0) && (num2 +=10) > 0); // false, n1 = 10, n2 = 0
int n1=0,n2=0;
布尔结果=((n1+=10)<0)和&(num2+=10)>0);//错误,n1=10,n2=0
//第一个答案

int n1 = 0, n2 = 0;
n += 10; n2 += 10; 
boolean result = (n1 < 0) && (n2 > 0); // n1=10, n2=10, false
int n1=0,n2=0;
n+=10;n2+=10;
布尔结果=(n1<0)&(n2>0);//n1=10,n2=10,错误
//短码

boolean result = !(!((n1 += 10)<0) && (n2 +=10)>0); // false, n1=10, n2=10          
boolean结果=!(!((n1+=10)0);//false,n1=10,n2=10

虽然两个答案显示相同的结果,我应该保持SCE活动还是缩短编码?我希望我的问题有意义。

您熟悉
&
运算符(它不是短路)?在实际工作环境中,这些都是无效的。变量名
n1
n2
result
使得不仔细检查代码就不可能知道发生了什么。编程很少是为了找到最快的方法或最短的代码,更重要的是其他人能够阅读和理解我的代码“我想知道在实际工作中,哪一个答案更合适。”第一个答案是肯定的(当然要有正确的变量名!!)。通常,您希望避免在if语句中使用
+=
+
等操作。因此,首先增加
n1
n2
,只有在必须同时增加它们时,才进行检查。如果“给定问题”的结果按照计划,我还是会把它分成几个部分:首先增加
n1
;然后进行
n1<0
检查;然后增加
n2
;然后进行
n2
检查。至于较短的代码,这样的双负数看起来非常混乱。代码应该在你一看到它的时候就非常清晰,不需要分析分析它的每一部分。PS/off-topic:在(用尽可能少的字节完成某项任务/挑战)中,我确实会使用按位AND和
&
,它将首先计算所有内容;以及删除空格,使用单字节变量,并使用Java的11+
var
var r=(a+=10)0;
。当然,在非代码高尔夫项目中千万不要这样做!