程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Java:String concat vs StringBuilder-已优化,所以我该怎么办?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Java:String concat vs StringBuilder-已优化,所以我该怎么办??

开发过程中遇到Java:String concat vs StringBuilder-已优化,所以我该怎么办?的问题如何解决?下面主要结合日常开发的经验,给出你关于Java:String concat vs StringBuilder-已优化,所以我该怎么办?的解决方法建议,希望对你解决Java:String concat vs StringBuilder-已优化,所以我该怎么办?有所启发或帮助;

我认为StringBuildervs 的使用+确实取决于您所使用的上下文。

通常使用JDK 1.6及更高版本,编译器会使用自动将字符串连接在一起StringBuilder

String one = "abc";
String two = "xyz";
String three = one + two;

它将编译String three为:

String three = new StringBuilder().append(onE).append(two).toString();

这非常有帮助,为我们节省了一些运行时间。但是,此过程并不总是最佳的。举个例子:

String out = "";
for( int i = 0; i < 10000 ; i++ ) {
    out = out + i;
}
return out;

如果我们编译为字节码,然后反编译生成的字节码,则会得到类似以下内容的结果:

String out = "";
for( int i = 0; i < 10000; i++ ) {
    out = new StringBuilder().append(out).append(i).toString();
}
return out;

编译器已经优化了内部循环,但是肯定没有进行最佳的优化。为了改善我们的代码,我们可以使用:

StringBuilder out = new StringBuilder();
for( int i = 0 ; i < 10000; i++ ) {
    out.append(i);
}
return out.toString();

现在,这比编译器生成的代码更理想,因此,在需要高效代码的情况下,肯定需要使用StringBuilder/StringBuffer类编写代码。当前的编译器不能很好地处理循环中的串联字符串,但是将来可能会改变。

您需要仔细查看以查看需要手动应用的位置,StringBuilder并尝试在不会降低代码可读性的位置使用它。

注意:我使用JDK 1.6编译了代码,然后使用该javap程序反编译了该代码,该程序吐出了字节代码。它很容易解释,并且在尝试优化代码时经常是有用的参。编译器确实会在后台更改您的代码,因此查看它的作用总是很有趣!

解决方法

在这个答案中,它表示(暗示)无论如何都将String连接优化到StringBuilder操作中,因此,当我编写代码时,是否有任何理由在源代码中编写StringBuilder代码?请注意,我的用例与OP的问题不同,因为我正在串联/附加数十万行。

为了使自己更清楚:我很清楚每种代码的区别,只是我不知道是否值得实际编写StringBuilder代码,因为它的可读性较低,并且当它的较慢的表亲String类自动转换为反正编译过程。

大佬总结

以上是大佬教程为你收集整理的Java:String concat vs StringBuilder-已优化,所以我该怎么办?全部内容,希望文章能够帮你解决Java:String concat vs StringBuilder-已优化,所以我该怎么办?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:concatvs