× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
++i;
i++; を比べると ++i; のほうが速い。 違いはもちろん 前置インクリメントは、インクリメントを先に行う。 後置インクリメントは、インクリメントを後に行う。 ということだ。 前置の場合、自身のインスタンスをインクリメントし、自身を戻り値として返せば良い。 なぜなら、インクリメントが先だから。インクリメント後の値をその次の計算で使うので、インクリメントしたものをそのまま戻り値にすればよい。 後置の場合、そうはいかない。 インクリメントするが、戻り値として返すのはインクリメントする前の元の値である。 ということで、「インクリメントするまえに自身のコピーインスタンスを作成している」のだ。 そして、戻り値として返すのはこのコピーインスタンスなのである。 このコピーの手間分だけ、後置インクリメントは遅くなる。 クラスインスタンスなどはもとより、intなどのプリミティブ型でもその差は出てくる。 試しに以下の処理を実行してみる その結果は以下のようになった。 何度もやると時間は変化するし、まれに逆転することもあるが、 後置は前置より遅くなる。 (この処理の前置と後置の順番を逆にしてもやはり後置が遅い) というわけで、インクリメント処理は理由が無い限り前置を使うこと。 PR |
|