AND与OR运算符用于确定值是否在范围内



我使用Java编写了一个带有范围条件的简单程序,发现下面的代码似乎包含了floor&天花板

即,即使值等于1000或1000000,也将执行{dosomething}。

if (value < 1000 || value > 1_000_000)
do something;

我知道,查找值是否在范围内/范围外的最佳实践是使用&amp;运算符而不是||

if (value >= 1000 && value <= 1_000_000)
do something;

但我只是想知道为什么会有区别?

如果值是而不是在一千到一百万之间,则第一个代码段将执行操作。你把自己弄糊涂了。

如果值在1000到一百万之间,则第二个代码段将执行操作。

我知道查找值是否在范围内/范围外的最佳实践是使用&amp;运算符而不是||

你被误导了。没有这样的"最佳实践"。

当你把AND和OR运算复杂地混合在一起,并且应用德摩根定律(!A&&!B!(A||B)相同(可以去掉括号,减少运算符的切换时,这是一个好主意,但最好的做法不是‘use&amp;而不是"||"——最佳实践只是"编写易于阅读、难以误解的代码",据推测,if (A && !B && C)if (A && !(B || !C))更容易理解、更容易扩展、更难误解,尽管它们的意思完全相同。

只要有人告诉你第二个片段在某种程度上是最佳实践,他实际上就有了一个更深入的想法,这是有意义的,好吧,"为什么?"-我刚告诉你为什么。任何最佳实践都过于简单化,只是一条经验法则。你可以用以下词语来界定任何最佳实践,以使其有意义:

当评估任何最佳实践"X"时,即代替"使用&amp;而不是||',将其挂在X周围并,然后评估它:

"在大多数应用程序中,应用"X"规则会使代码在面对不断变化的请求和围绕它的代码重构时更加灵活,对于普通的java程序员来说更容易理解(就像在中一样,普通的程序员可能不会读它,认为他们知道它的作用,但却错了(,并且很容易测试;。

然后把X插回去。如果它听起来像大便,那是因为它是,经验法则不应该适用。即使(特别是!(这是"公认的最佳实践"。

您这样说:if(value<1000|| value>1_000_000(做某事;如果值等于1000或1000000,将执行此操作,但在这种情况下,如果值小于1000或大于1000000,则执行此操作。因此,您可以执行:

如果(值==1000 ||值==1_000_000(做某事;

但对于你的问题,这是你的两个骗局之间的一个很大的区别,所以你必须知道,如果两者中的一个是真的,并且&amp;如果两者都是真的,就会这样做,所以这是一个巨大的差异。

相关内容

最新更新