2013-11-24 46 views
3
  • int[] a = new int[] {1, 2, 3};

而且我們聲明數組的方式有什麼區別嗎?

  • int[] a = {1, 2, 3};

有那些之間的任何實際的區別是什麼?

+0

希望這將有助於http://www.learn-java-tutorial.com/Arrays.cfm#.UpHnzdKBnto – Shamse

+0

dublicate http://stackoverflow.com/questions/19558078/declaring-arrays-in -java/19558227#19558227 –

回答

2

它們是等價的,二者沒有區別。

new關鍵字創建一個對象 ..並且您正在創建..一個array,這是一個對象。

Chapter 10. Arrays

在Java編程語言,數組對象(§4.3.1) ...

+0

謝謝。我認爲這個問題是這樣的:底層是否有一些棘手的問題?像'new String(「blabla」)' – ferrerverck

+0

不。在Java中沒有數組池。 Java中的String是特殊的,它們在基元和對象之間。因此,'String a =「hello」;'和String a = new String(「Hello」);'是不同的。 – Maroun

+0

@ferrerverck你可以看到兩者的字節碼,它會非常相似。 – Maroun

0

你的第二種形式是第一種形式只是語法速記。它們編譯成完全相同的字節碼。

0

看看編譯後的類文件中的字節碼,沒有什麼區別。

public class XFace { 

    public void test1(){ 
     int[] a = new int[] {1, 2, 3}; 
    } 


    public void test2(){ 
     int[] a = {1, 2, 3}; 

    } 

} 

Compiled from "XFace.java" 
public class XFace extends java.lang.Objec 
public XFace(); 
    Code: 
    0: aload_0 
    1: invokespecial #8; //Method java/ 
    4: return 

public void test1(); 
    Code: 
    0: iconst_3 
    1: newarray int 
    3: dup 
    4: iconst_0 
    5: iconst_1 
    6: iastore 
    7: dup 
    8: iconst_1 
    9: iconst_2 
    10: iastore 
    11: dup 
    12: iconst_2 
    13: iconst_3 
    14: iastore 
    15: astore_1 
    16: return 

public void test2(); 
    Code: 
    0: iconst_3 
    1: newarray int 
    3: dup 
    4: iconst_0 
    5: iconst_1 
    6: iastore 
    7: dup 
    8: iconst_1 
    9: iconst_2 
    10: iastore 
    11: dup 
    12: iconst_2 
    13: iconst_3 
    14: iastore 
    15: astore_1 
    16: return 

} 
相關問題