Biểu mẫu đầu tiên có thể sẽ phải chịu một số hình phạt về hiệu suất, vì việc đánh giá nó sẽ yêu cầu, trước iflt
, một aload
, arraylength
và iload
; trong khi thứ hai chỉ có hai số iload
s.
@ajp đúng đề cập rằng myArray
có thể thay đổi; do đó, rất cao không thể rằng trình biên dịch sẽ tối ưu hóa biểu mẫu đầu tiên thành biểu mẫu thứ hai cho bạn (trừ khi, có thể, myArray
là final
).
Tuy nhiên, JIT, khi nó đá vào, có lẽ là đủ thông minh để nếu myArray
không thay đổi, nó sẽ biến biểu mẫu đầu tiên thành thứ hai.
Chỉ trong trường hợp, dù sao, hãy sử dụng biểu mẫu thứ hai (đây là những gì tôi luôn làm, nhưng đó chỉ là thói quen). Lưu ý rằng bạn luôn có thể javap
tệp lớp được tạo để xem mã byte được tạo và so sánh.
Nhân tiện, Wikipedia có very handy page listing all of a JVM's bytecodes. Như bạn có thể thấy, khá nhiều người trong số họ được dành riêng cho mảng!
Downvoter vui lòng giải thích. – fge
'mảnglength' là hướng dẫn để tải chiều dài của mảng,' iload' là lệnh tải giá trị của biến cục bộ. Có một hướng dẫn (mặc dù được đặt tên khác nhau) để được đánh giá theo một trong hai cách. Đối với thực tế là mảng có thể thay đổi, tốt ... vì vậy có thể một biến địa phương. – Dima
Và? Điều đó không biện minh cho donwvote cả. Đọc nhận xét về nhận xét trước của bạn và câu trả lời đã chỉnh sửa. – fge