ninjalj は、式を として安全に書き換えることができるという点で正しいと思いますlocal = field; while (local != 0) {...; local = field }
。ただし、実際のコードでは、次のように、はるかに複雑な式が含まれていますwhile ((((e = (int)(c = ctl)) | (u = (int)(c >>> 32))) & (INT_SIGN|SHORT_SIGN)) == (INT_SIGN|SHORT_SIGN) && e >= 0) {
。それを一連の一時的な変数割り当てと条件文に書き直すと、2 行からコードの半分の画面に変わり、そのような重要なコード コードの 2 つのコピー (ループの前とループ本体の内側) を持つことで、保守性と読みやすさが向上します。悪夢。
関数全体のコード サイズと一時ローカル変数の数も大きくなる可能性があり、パフォーマンスに影響を与えるか、少なくともオプティマイザーの作業が難しくなる可能性があります。インライン化されたバージョンは次のようにコンパイルできますlabel loop_start; calculate condition; if (!condition) goto after_loop; loop_body; goto loop_start; label after_loop;
。ループ条件が明示的に 2 回計算されるコードを単独で重複排除するほどコンパイラが常にスマートであるとは思えません。