gpt4 book ai didi

java - 为什么 ".concat(String)"比 "+"快这么多?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:58:35 26 4
gpt4 key购买 nike

<分区>

我编写的一些代码比较了用 "string"+ "string" 连接字符串所需的时间:

for(int i = 0; i < 100000000L; i++)
{
String str2 = str + str;
}

"string".concat("string"):

for(int i = 0; i < 100000000L; i++)
{
String str2 = str.concat(str);
}

其中 str == "string"

我得到的输出始终与此相似,尽管平均差异通常接近 61 纳秒:

String str2 = str + str: 118.57349468 nanoseconds

String str2 = str.concat(str): 52.36809985 nanoseconds

.concat is faster than + by 66.20539483 nanoseconds

这表明即使使用循环和对新字符串的赋值,.concat 也比 + 快两倍以上。当我使用更长的字符串时(str == "this is a really really very long string that is very long"),它的速度提高了大约三倍。这特别奇怪,因为如果 .concat 更快,他们不应该让 + 编译成 .concat 吗?

我的主要问题是:为什么 .concat 更快?

完整代码,如果您想运行它并进行试验:

public class TimeCompare
{
public static void main(String[] args)
{
final long times = 100000000L;

String str = "String";

long start1 = System.nanoTime();

for(int i = 0; i < times; i++)
{
String str2 = str + str;
}

long end1 = System.nanoTime();
long time1 = end1 - start1;

System.out.println((double)(time1) / times);
System.out.println();

long start2 = System.nanoTime();

for(int i = 0; i < times; i++)
{
String str2 = str.concat(str);
}

long end2 = System.nanoTime();
long time2 = end2 - start2;

System.out.println((double)(time2) / times);
System.out.println();

System.out.println(".concat is faster than \"+\" by " + ((double)(time1 - time2) / times) + " nanoseconds");
}
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com