Thread.sleep(9000l);Thread.sleep(9000);有什么区别

它与线程的睡眠时间不同还是相同。

最佳答案

完全没有区别。

Thread.sleep只有一个重载:Thread.sleep(long)。第二种形式指定一个int参数,但是它将自动扩展为long

由于9000是一个常量表达式,因此编译器将其重写为9000L

public void one() throws InterruptedException {
  Thread.sleep(9000);
}

public void two() throws InterruptedException {
  Thread.sleep(9000L);
}


反编译为...

  public void one() throws java.lang.InterruptedException;
    Code:
       0: ldc2_w        #2                  // long 9000l
       3: invokestatic  #4                  // Method java/lang/Thread.sleep:(J)V
       6: return

  public void two() throws java.lang.InterruptedException;
    Code:
       0: ldc2_w        #2                  // long 9000l
       3: invokestatic  #4                  // Method java/lang/Thread.sleep:(J)V
       6: return


字节码相同,因此没有区别。

09-30 12:16
查看更多