1

查看旧代码的更改,我看到了一个非常有趣的更改。有区别:

if(retValue.equals("") || retValue == null){

if(retValue == null || retValue.equals("")){

有什么建议么?与jvm有什么区别?

谢谢。

4

3 回答 3

5

当然。有明显的区别。例如,在 retValue 为 null 的情况下,第一个将导致 NullPointerException。

于 2012-07-23T14:02:45.600 回答
5

||and运算符是“惰性的&&”:JVM 将在确定结果后立即停止对表达式的求值。

  • 在 的情况下||,一旦其中一个操作数为真 ==> 整个表达式为真,它将立即停止。
  • 在 的情况下&&,一旦其中一个操作数为假 ==> 整个表达式为假,它将立即停止。

引自JLS #15.24(强调我的):

条件或运算符运算||符类似于|(§15.22.2),但仅当其左侧操作数的值为 false 时才评估其右侧操作数

于 2012-07-23T14:05:26.053 回答
0

如果任一语句为真,OR 返回真。这意味着 if 只会检查第一条语句(例如,在第二行代码中)

retValue == null

如果第一个为真,则不会检查第二个。这意味着如果 retValue 为 null,第一行代码可能意味着 NullPointerException,但对于相同的输入,第二行不会有 NullPointerException。

于 2012-07-23T14:05:52.493 回答