Java 为什么是!=在if语句的早期,它与if语句的结尾不一样吗?
我不知道这两种if条件之间有什么区别。对我来说似乎是一样的 添加括号使其成为Java 为什么是!=在if语句的早期,它与if语句的结尾不一样吗?,java,operator-precedence,Java,Operator Precedence,我不知道这两种if条件之间有什么区别。对我来说似乎是一样的 添加括号使其成为((字段[i][j]!=-1)也不会改变任何内容 if (field[i][j] != -1 && i>=0 && i< numRows && j >= 0 && j < numCols){} //wrong version is NOT the same as if (0 <= i && i < n
((字段[i][j]!=-1)
也不会改变任何内容
if (field[i][j] != -1 && i>=0 && i< numRows && j >= 0 && j < numCols){}
//wrong version
is NOT the same as
if (0 <= i && i < numRows && 0 <= j && j < numCols && field[i][j] != -1){}
//right version
if(字段[i][j]!=-1&&i>=0&&i=0&&jif(字段[i][j]!=-1&&i>=0&&i=0&&j
不一样
if (0 <= i && i < numRows && 0 <= j && j < numCols && field[i][j] != -1){} //right version
if(0if(字段[i][j]!=-1&&i>=0&&i=0&&j
不一样
if (0 <= i && i < numRows && 0 <= j && j < numCols && field[i][j] != -1){} //right version
如果(0&&
是惰性运算符
如果左侧的评估结果为false
,则无需评估右侧,因为整体操作的结果已经已知
这可能导致a和&b
与b和&a
之间存在差异
让我们看一下a和。在这种情况下b
会产生副作用(就像在代码中抛出异常一样)。如果a
的计算结果为false
,那么b
将根本不会被计算。&
是惰性运算符
如果左侧的评估结果为false
,则无需评估右侧,因为整体操作的结果已经已知
这可能导致a和&b
与b和&a
之间存在差异
让我们看一下a和
。在这种情况下b
会有副作用(就像在代码中抛出异常一样)。如果a
的计算结果为false
,那么b
将根本不会被计算。你到底有什么问题?你说错了,但错了为什么?错“错”有什么问题版本?它的行为如何不同?您可能会得到一个异常?当i
或j
小于0时,第一个可能会抛出IndexOutOfBoundsException
,然后从左到右计算0个条件。如果任何条件失败,则&
短路。因此,两个If(s)不相等。&&
是一种短路操作,因此如果i
或j
超出范围,则在第二个版本中,字段[i][j]
永远不会到达,因此不会出现异常。您的问题到底是什么?您说错了,但错了为什么?错误是什么问题版本?它的行为如何不同?您可能会得到一个异常?当i
或j
小于0时,第一个可能会抛出IndexOutOfBoundsException
,然后从左到右计算0个条件。如果任何条件失败,则&
短路。因此,两个If(s)不等效。&
是一种短路操作,因此如果i
或j
超出范围,则在第二个版本中,字段[i][j]
永远不会到达,因此不会引发异常