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 或编译器似乎不太可能为此进行优化。

是的,使用第二种形式肯定更有效——我认为它也更具可读性。当更具可读性的代码也更有效时,这很清楚地表明要使用哪个代码;)

于 2013-03-11T13:13:20.293 回答