Câu trả lời là trong ngôn ngữ Java Specification, không cần phải biên soạn lại :) Đây là những gì chúng ta có thể đọc về the enhanced for statement:
Các tăng cường cho tuyên bố có dạng:
EnhancedForStatement:
for (VariableModifiersopt Type Identifier: Expression) Statement
Biểu thức phải có loại Iterable
hoặc loại khác phải thuộc loại mảng (§10.1) hoặc xảy ra lỗi biên dịch .
Phạm vi của biến cục bộ được khai báo trong phần FormalParameter của tuyên bố nâng cao for
(§14.14) là Tuyên bố chứa
Ý nghĩa của tăng cường for
tuyên bố được đưa ra bởi dịch sang một for
tuyên bố cơ bản.
Nếu loại Expression
là một subtype của Iterable
, sau đó để I
được kiểu của biểu thức Expression.iterator()
. Việc tăng cường for
tuyên bố là tương đương đến một for
tuyên bố cơ bản của hình thức :
for (I #i = Expression.iterator(); #i.hasNext();) {
VariableModifiersopt Type Identifier = #i.next();
Statement
}
đâu #i
là một trình biên dịch tạo nhận dạng đó là khác biệt với bất kỳ định danh khác (trình biên dịch tạo hoặc) nằm trong phạm vi (§6.3) tại thời điểm được tăng cường cho tuyên bố .
Nếu không, Biểu thức nhất thiết phải có loại mảng, T[]
. Hãy để L1 ... Lm
là chuỗi (có thể trống) nhãn ngay trước câu lệnh nâng cao for
. Sau đó, ý nghĩa của tăng cường cho tuyên bố được đưa ra bởi cơ for
tuyên bố sau:
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
đâu một và i là trình biên dịch tạo định danh được phân biệt với bất kỳ định danh khác (biên dịch được tạo ra hoặc cách khác) nằm trong phạm vi tại các điểm nơi tăng cường cho tuyên bố xảy ra.
(Cú pháp của vòng lặp nâng cao là một chút quay lại phía trước.) –
Tôi không biết liệu tôi có đồng ý với việc gọi tối ưu hóa sớm này hay không. Nó là hợp lý để muốn hiểu những gì trình biên dịch đang làm với mã của bạn. Chúng tôi cũng không biết tại thời điểm nào trong dự án của anh ấy (nếu anh ta thậm chí còn làm việc trên một dự án và không hỏi về mặt học thuật) anh ta đang hỏi điều này. Nó có thể là vào cuối cùng. –
+1 cho câu hỏi. – user12458