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 .
Нет, примитивы строк не имеют методов. Как и в случае с числовыми примитивами, среда выполнения JavaScript будет продвигать их к полномасштабным объектам «String» при вызове таких конструкций, как:
var space = "hello there".indexOf(" ");
. На некоторых языках (ну, в частности, Java, но Я думаю, что этот термин является общепринятым), говорят, что язык «помещает» примитивы в свои обертки объектов, когда это необходимо. С числами это немного сложнее из-за капризов грамматики маркера; вы не можете просто сказать
var foo = 27.toLocaleString();
, потому что «.» не будет интерпретироваться так, как вам нужно; однако:
var foo = (27).toLocaleString();
работает нормально. С примитивами строк - mdash; и boolean, если на то пошло; грамматика не является двусмысленной, поэтому, например:
var foo = true.toString();
будет работать.
Технически правильный ответ - «нет».
Реальный ответ - «нет, но он все равно будет работать». Это потому, что, когда вы делаете что-то вроде
"s".replace()
, интерпретатор знает, что вы хотите фактически работать с строкой, как если бы вы создали ее с помощью
var str = new String("s")
и, следовательно, если вы это сделали.