首页 > 解决方案 > JVM可以交换这两行吗?

问题描述

JVM 是否理解 Method 中的这两行是逻辑相连的,并逐行执行。或者这些线是否有可能被交换和NullPointerException抛出?

这个问题是关于一个单线程程序。

   public void foo(Object object) {
      if(object == null) System.out.println("Oops!");
      if(object.list == null) System.out.println("Oops!");
    }

编辑:

public void foo(Object object) {
  if(object == null) return;
  if(object.list == null) System.out.println("Oops!");
}

标签: java

解决方案


多线程与否,JVM永远不会交换那两条线,这至少可以说是非常糟糕的。

话虽如此,您的(原始)代码可能会抛出NPE

if(object == null) System.out.println("Oops!");
if(object.list == null) System.out.println("Oops!");

因为在第二个if对象可以为空。但我猜你只是用方法来证明一个观点。最好是以下内容:

public void foo(Object object) {
    ....
    else if(object == null) System.out.println("Oops!");
    else if (object.list == null) System.out.println("Oops!");
}

您当前的示例:

public void foo(Object object) {
   if(object == null) return;
   if(object.list == null) System.out.println("Oops!");
}

没有同样的问题。


推荐阅读