【发布时间】:2012-07-23 14:01:36
【问题描述】:
查看旧代码的更改,我看到了一个非常有趣的更改。有区别:
if(retValue.equals("") || retValue == null){
if(retValue == null || retValue.equals("")){
有什么建议吗?和jvm有什么区别?
谢谢。
【问题讨论】:
标签: java if-statement core
查看旧代码的更改,我看到了一个非常有趣的更改。有区别:
if(retValue.equals("") || retValue == null){
if(retValue == null || retValue.equals("")){
有什么建议吗?和jvm有什么区别?
谢谢。
【问题讨论】:
标签: java if-statement core
|| 和 && 运算符是“惰性的”:JVM 将在确定结果后立即停止对表达式的求值。
|| 的情况下,一旦其中一个操作数为真 ==> 整个表达式为真,它将立即停止。&& 的情况下,只要其中一个操作数为假==> 整个表达式为假,它将立即停止。引用JLS #15.24(强调我的):
条件或运算符
||运算符类似于|(第 15.22.2 节),但 仅当其左侧操作数的值为 false 时才评估其右侧操作数 .
【讨论】:
当然。有明显的区别。例如第一个将在 retValue 为 null 的情况下导致 NullPointerException。
【讨论】:
如果任一语句为真,OR 返回真。 这意味着 if 只会检查第一条语句(例如,在第二行代码中)
retValue == null
如果第一个为真,则不会检查第二个。这意味着如果 retValue 为 null,第一行代码可能意味着 NullPointerException,但对于相同的输入,第二行不会有 NullPointerException。
【讨论】: