我混淆了两个代码,为什么我在这里给出的第二个代码比第一个代码更有效。
这两个代码只是反转一个字符串,但第一个代码比另一个慢,我无法理解为什么。
第一个代码是:
String reverse1(String s) {
String answer = "";
for(int j = s.length() - 1; j >= 0; j--) {
answer += s.charAt(j);
}
return answer;
}
第二个代码是:
String reverse2(String s) {
char answer[] = new char[s.length()];
for(int j = s.length() - 1; j >= 0; j--) {
answer[s.length() - j - 1] = s.charAt(j);
}
return new String(answer);
}
我无法理解第二个代码如何比第一个代码更高效,对此我很感激。
最佳答案
第一个代码声明
String answer;
字符串是不可变的。因此,每次追加操作都会重新分配整个字符串,复制它,然后复制到新字符中。
第二个代码声明
char answer[];
数组是可变的,所以每次迭代只复制一个字符最后一个字符串只创建一次,而不是每次循环迭代创建一次。
关于java - 为什么第二个代码比第一个更有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53940426/