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