【问题标题】:Is there any difference for jvm at this two java lines:这两条 java 行中的 jvm 有什么不同:
【发布时间】:2012-07-23 14:01:36
【问题描述】:

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

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

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

有什么建议吗?和jvm有什么区别?

谢谢。

【问题讨论】:

    标签: java if-statement core


    【解决方案1】:

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

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

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • -1 解释为什么应该有助于弄清楚为什么会发生这种情况。 CFR 短路评估。
    【解决方案3】:

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

    retValue == null
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多