Допустимо ли следующее объявление переменной Java? - PullRequest
4 голосов
/ 27 февраля 2012

Я ошибочно объявил массив строк следующим образом:

String[] tokens[];

Eclipse не выделяет это как ошибку, а вместо этого считает его эквивалентным:

String[][] tokens;

Этоправильное поведение или ошибка?

Ответы [ 6 ]

3 голосов
/ 27 февраля 2012

Это правильное поведение - массивы могут быть определены в скобках после типа переменной или имени переменной.

String[] tokens;

и

String tokens[];

одинаковы.Это, однако, запутанный способ написания двумерного массива, поэтому я не намеренно использовал бы его;)

Если вы думаете о массивах как об объектах (какими они технически являются), а квадратные скобки - как синтаксический сахар для новогоключевое слово и пустой конструктор, вы можете представить свою «ошибку» как:

tokens = new Array<String>(new Array<String>());

, так как оба

String[] tokens; 

и

String tokens[];

будут эквивалентны

new Array<String>();
2 голосов
/ 27 февраля 2012

Да, это правильно. Это эквивалентно:

String[] tokens[];
String tokens[][];
String[][] tokens;

Для ясности вы должны объявить "[]" для типа переменной, а не для ее имени, но в остальном все в порядке.

1 голос
/ 27 февраля 2012

Согласно учебнику по Java , вы можете (но обычно не должны) объявлять массивы в квадратных скобках после имени переменной:

Вы также можете поместить квадратные скобки послеимя массива:

// this form is discouraged
float anArrayOfFloats[];

Однако соглашение не поощряет эту форму;скобки идентифицируют тип массива и должны отображаться с обозначением типа.

Учитывая это и ваши наблюдения, можно с уверенностью сказать, что Eclipse позволяет вам смешивать те формы объявлений, которые в вашем случае приводят кмассив массивов.

1 голос
/ 27 февраля 2012

Trust Eclipse.Все следующие являются эквивалентами:

String tokens[][];
String[] tokens[];
String [][]tokens;
1 голос
/ 27 февраля 2012

Это действительная декларация.Вы также можете объявить это как String tokens[][];

0 голосов
/ 27 февраля 2012

Это воспоминание о старых языках, таких как C / C ++.

На самом деле, для того, как проверка типов и JVM работает в Java, объявление

String[][] tokens;

более связно.

Это потому, что вы объявляете tokens с типом "двумерного массива String объектов", поэтому String[][] можно считать объявлением одного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...