Apabila menggantikan gelung dengan untuk setiap gelung, pembangun sering menghadapi corak berikut:
<code class="java">for (int i = 0, n = a.length; i < n; i++) { ... }</code>
Daripada yang lebih mudah:
<code class="java">for (int i = 0; i < a.length; i++) { ... }</code>
Ini menimbulkan persoalan: adakah tugasan tambahan n = a.length merupakan prestasi yang dicapai untuk tatasusunan?
Tidak , panggilan ke array.length ialah O(1) atau operasi masa tetap.
Sifat .length tatasusunan ialah ahli akhir awam dan mengaksesnya tidak lebih perlahan daripada pembolehubah tempatan. Ini tidak seperti panggilan kaedah seperti size(), yang biasanya melibatkan lebih banyak overhed.
Pengkompil JIT moden juga boleh mengoptimumkan panggilan ke .length untuk menghapuskannya sepenuhnya. Untuk mengesahkan ini, seseorang boleh memeriksa kod sumber pengkompil JIT atau memeriksa kod asli yang dibuang.
Walau bagaimanapun, pengkompil JIT mungkin tidak sentiasa dapat melaksanakan pengoptimuman ini, seperti apabila penyahpepijatan didayakan atau apabila badan gelung mengandungi pembolehubah setempat yang berlebihan.
Atas ialah kandungan terperinci ## Adakah Memanggil `array.length` dalam for Loop merupakan Bottleneck Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!