4

ときどき、次のようなコードを目にします。

if (id.split(":").length > 1) {
 sub_id = id.split(":")[1];
 parent_id = id.split(":")[0];
}

次のようなことをする方が良い(そして速い)ではないでしょうか

String [] ids = id.split(":");
if (ids.length > 1) {
  sub_id = ids[1];
  parent_id = ids[0];
}

この方法では、'split()' を複数回呼び出す必要はありませんか、それともコンパイラ/JIT はそのような最適化を行いますか?

4

1 に答える 1

10

もちろん、JITコンパイラがそのような最適化を実行するとは思いません次のことを知っている必要があります。

  • 結果は呼び出し間で「有用に」変化しません
  • 各メソッド呼び出しが個別の配列を生成するという事実を使用するものは何もありませんでした
  • 各メソッド呼び出しが異なる文字列オブジェクトを生成するという事実を使用するものは何もありませんでした

JIT またはコンパイラのいずれかがこれを最適化する可能性は非常に低いようです。

はい、間違いなく 2 番目の形式を使用する方が効率的です。より読みやすいコードがより効率的である場合、それはどのコードを使用するかを明確に示しています;)

于 2013-03-11T13:13:20.293 に答える