Почему строковые JavaScript-примитивы? [Дубликат]

for (Iterator i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

Обратите внимание, что если вам нужно использовать i.remove(); в вашем цикле или каким-либо образом получить доступ к фактическому итератору, вы не можете использовать идиому for ( : ), так как фактический итератор просто выводится.

Как отметил Денис Буено, этот код работает для любого объекта, который реализует интерфейс Iterable .

Кроме того, если правая часть for (:) idiom - это array, а не объект Iterable, внутренний код использует индексный индекс int и проверяет вместо array.length. См. Спецификацию языка Java .

8
задан Pacerier 14 May 2014 в 09:49
поделиться

2 ответа

Нет, примитивы строк не имеют методов. Как и в случае с числовыми примитивами, среда выполнения JavaScript будет продвигать их к полномасштабным объектам «String» при вызове таких конструкций, как:

var space = "hello there".indexOf(" ");

. На некоторых языках (ну, в частности, Java, но Я думаю, что этот термин является общепринятым), говорят, что язык «помещает» примитивы в свои обертки объектов, когда это необходимо. С числами это немного сложнее из-за капризов грамматики маркера; вы не можете просто сказать

var foo = 27.toLocaleString();

, потому что «.» не будет интерпретироваться так, как вам нужно; однако:

var foo = (27).toLocaleString();

работает нормально. С примитивами строк - mdash; и boolean, если на то пошло; грамматика не является двусмысленной, поэтому, например:

var foo = true.toString();

будет работать.

14
ответ дан Pointy 25 August 2018 в 06:12
поделиться

Технически правильный ответ - «нет».

Реальный ответ - «нет, но он все равно будет работать». Это потому, что, когда вы делаете что-то вроде

"s".replace()

, интерпретатор знает, что вы хотите фактически работать с строкой, как если бы вы создали ее с помощью

var str = new String("s")

и, следовательно, если вы это сделали.

4
ответ дан helloandre 25 August 2018 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: