JavaRush /Java 博客 /Random-ZH /String += String 还是 StringBuilder.append(String)?
SemperAnte
第 4 级
Донецк

String += String 还是 StringBuilder.append(String)?

已在 Random-ZH 群组中发布
在这篇文章中,我想考虑、分析、讲述和展示类中的append方法和forStringBuilder操作 符之间的区别。这里的问题与其说是应用领域,不如说是代码优化。 +=String
String += String 还是 StringBuilder.append(String)? - 1
是的,毫无疑问没有深入研究这个问题的人会说:“为什么我要通过创建一个完全不同的类的新对象来替换 += 运算符,然后也调用该方法toString()?我们是什么样的最优性? “在说什么?选择是显而易见的,你在说什么?” 他就完全错了。问题之一是String它并不原始。String- 与 Java 中的任何其他对象一样的对象class,如您所知,在 Java 中不存在运算符重载(例如在 C++ 中),运算符仅为基元定义,对于任何类,我们都不能重写任何运算符。这就是为什么运算符“ +”和“ +=”是Java库的一种“拐杖”,而拐杖总是会带来损失。实际上,让我们停止拉猫尾巴并继续进行测量。这是一个简单的程序,用于测量将一行与循环变量“粘合”100,000 次所需的时间。
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        String s = "Hello";
        for(int i = 0; i < 100000; ++i)
        {
            s+=i;
        }
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
在我的电脑上,控制台显示 6815ms。也就是说,我的电脑花了将近 7 秒的时间才把这条线拼接在一起。现在让我们用 StringBuilder 替换它,甚至将该方法包含toString()在测量中。
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        StringBuilder sb = new StringBuilder("Hello");
        for(int i = 0; i < 100000; ++i)
        {
            sb.append(i);
        }
        String s = sb.toString();
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
我的电脑告诉我 10 毫秒。即 0.01 秒。我认为实践中的差异是相当明显的;粗略地说,它的运行速度append快了700倍。这是因为,很可能“ +”和“ +=”本身可以调用相同的附加,但同时为了理解这样的运算符是否存在以及它是什么,已经在语言的拐杖中走了很长的路。应该做(最后一段只不过是猜测,我不是 JVM 开发人员,我不知道那里有什么以及如何做)。这是一个明显的例子,说明额外的对象并不总是昂贵的。是的,代码会长几行,但在大型项目中节省的时间可能是巨大的。请注意,这些测量并不是在配备史前处理器的办公室电脑上进行的,但现在想象一下,在这台几乎无法拉动围巾的办公室电脑上,它会产生多大的变化。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION