我混淆了两个代码,为什么我在这里给出的第二个代码比第一个代码更有效。
这两个代码只是反转一个字符串,但第一个代码比另一个慢,我无法理解为什么。
第一个代码是:

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/

10-10 13:14