【发布时间】:2015-06-07 05:42:45
【问题描述】:
如果我替换,对代码优化(速度等)有什么影响吗?
//之前
public void test(String str)
{
for(int i=0; i<str.length(); i++)
{
System.out.println(str.charAt(i)); // VIOLATION
}
}
上面的代码片段和下面的代码:-
// 之后
public void test(String str)
{
char[] ch = str.toCharArray(); // CORRECTION
for(int i=0; i < ch.length; i++)
{
System.out.println(ch[i]); // CORRECTION
}
}
【问题讨论】:
-
真的是回答“X 比 Y 快吗?”的唯一方法。是试试看。
-
当您遇到瓶颈并将其定位到特定代码位时,最好进行优化。您是否发现这段代码是导致您的应用程序运行缓慢的原因?
-
toCharArray必须遍历整个字符串并创建数组,该数组将首先复制所有字符。然后,您将不得不再次迭代该副本。charAt没有这个问题。 -
@Pshemo :-) 另一方面,
System.out.println(ch[i]);可能在某些机器上运行得更快,因为它可以直接访问数组索引(JIT 可能会很好地优化它)。如果是 @ 987654327@ 每次调用时都会进行额外的条件检查,这可能会导致 JIT 无法优化代码。 :) -
@TheLostMind 是的,这就是为什么我们通常不会去优化,直到我们看到某些功能真的很慢:) 正如已经说过的“Premature optimization is the root of all evil”