2014-01-16 5 views
1

Синтаксис в сторону, есть ли разница между двумя следующими утверждениями?Инициализация массива и ключевое слово «новое»

String[] str = { "test" }; 

и

String[] str = new String[] {"test"}; 
+2

Нет, нет. –

+0

Вы не можете разбить первый на несколько операторов. Это все. –

+0

Нет, это просто синтаксис ярлыка. И вы можете проверить, увидев байт-код, созданный этим двумя фрагментами кода. –

ответ

2

Нет, нет.

String[] str = { "test" }; 

Будет interperated в JVM, как

String[] str = new String[] {"test"}; 
4

Нет, нет никакой разницы. За исключением, если вы хотите, чтобы передать его методу

methodWhichAcceptsArray({"a", "b"}); //won't compile 
methodWhichAcceptsArray(new String[] {"a", "b"}); //ok 
4

Давайте посмотрим:

// String[] str1 = { "test" }; 
    0: iconst_1  
    1: anewarray  #16     // class java/lang/String 
    4: dup   
    5: iconst_0  
    6: ldc   #18     // String test 
    8: aastore  
    9: astore_1  

// String[] str2 = new String[] {"test"}; 
    10: iconst_1  
    11: anewarray  #16     // class java/lang/String 
    14: dup   
    15: iconst_0  
    16: ldc   #18     // String test 
    18: aastore  
    19: astore_2  

Как вы можете видеть, что они компилируются в одинаковых байткодов.

Обратите внимание на то, что на внешней основе вы обычно должны использовать вторую форму.

Смежные вопросы