Pertanyaan Apakah “kondisi” dari loop yang disebut setiap kali untuk Iterables?


Katakanlah saya memiliki kode berikut:

for (Object obj : Node.getIterable()) {
    //Do something to object here
}

dan Node.getIterable () mengembalikan sebuah iterable. Apakah fungsi getIterable () dipanggil setiap kali atau hanya ketika loop dimulai? Haruskah saya mengubahnya menjadi:

Iterable<Object> iterable = new Iterable<Object>();
//populate iterable with objects
for (Object obj : iterable) {
    //Do something
}

5
2017-10-07 19:45


asal


Jawaban:


Spesifikasi Bahasa Java menjelaskan secara persis apa yang pernyataan foreach lakukan. Lihat "14.14.2 Pernyataan yang disempurnakan" untuk informasi lebih lanjut (http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2). Namun singkatnya, sebenarnya bahasa menjamin bahwa ekspresi yang Anda rujuk akan hanya dievaluasi sekali.


11
2017-10-07 19:50



Tidak, tidak. Itu membuat item iterable yang diterimanya dari getIterable() dalam memori dan menggunakan referensi itu. Cara cepat untuk memeriksa adalah menempatkan titik istirahat di for pernyataan dan debug jalan Anda ke JDK. Anda akan tahu.


3
2017-10-07 19:56