【问题标题】:Can the JVM swap these two lines? [duplicate]JVM可以交换这两行吗? [复制]
【发布时间】:2021-03-14 18:08:20
【问题描述】:

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


    【解决方案1】:

    多线程与否 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!");
    }
    

    没有同样的问题。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多