+= 是否比 concat 更有效?

2022-09-03 09:54:47

我一直在阅读团队中其他开发人员生成的代码,他们似乎更喜欢使用字符串串联,而我更喜欢使用,因为它感觉更容易阅读。+=.concat()

我试图准备一个关于为什么使用更好的论点,我想知道,两者之间的效率有什么区别吗?.concat()

我们“应该”采取哪种选择?

public class Stuff {

    public static void main(String[] args) {

        String hello = "hello ";
        hello += "world";
        System.out.println(hello);

        String helloConcat = "hello ".concat("world");
        System.out.println(helloConcat);
    }
}

答案 1

由于 String 在 java 中是不可变的,因此当您执行 或 时,将生成一个新的 String。String 越大,花费的时间就越长 - 要复制的越多,产生的垃圾就越多。++=concat(String)

今天的java编译器优化了您的字符串串联以使其最佳,例如

System.out.println("x:"+x+" y:"+y);

编译器将其生成为:

System.out.println((new StringBuilder()).append("x:").append(x).append(" y:").append(y).toString());

我的建议是编写更易于维护和阅读的代码。

此链接显示了 StringBuilder vs StringBuffer vs String.concat 的性能 - 正确完成


答案 2

这应该无关紧要。现代Java编译器,JVM和JIT将以这样一种方式优化您的代码,即差异可能很小。您应该努力编写更具可读性和可维护性的代码。