2017-02-15 63 views
0

之間的區別是什麼Thread.sleep(9000l);Thread.sleep(9000);是什麼了Thread.Sleep(9000升)和Thread.sleep代碼(9000)

之間的差異在線程的睡眠時間區別呢,或者它是一個相同的。

+3

這是一樣的。 9000L只是java中的一個慣例,用於定義您使用的數字的類型是long。例如float(0.1f) – vegaasen

+1

也沒有區別。 Thread.sleep只有一個重載:'Thread.sleep(long)'。第二種形式指定了一個'int'參數,但它會自動擴展爲'long'。 –

+1

請注意,使用'L'後綴而不是'l'來指定長文字可能會更好:在某些字體中'l'看起來很像'1'。 –

回答

5

根本沒有區別。

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 

相同的字節碼,所以沒有區別。