我试图理解什么是最佳实践,以及为什么在不同情况下连接字符串文本和变量。例如,如果我有这样的代码
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String).append("CCCCCCCCCCC").append(D_String)
.append("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.append("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
这样做吗?在这篇文章中,我注意到字符串上的操作符创建了一个新的StringBuilder实例,连接操作数,并返回字符串转换,这似乎比调用
要复杂得多。append()
;如果这是真的,那就不可能了。但是字符串呢。concat()?使用是否合适。append()
用于每个连接?或者只针对变量,可以使用附加文字。concat()
?
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String.concat("CCCCCCCCCCC")).append(D_String
.concat("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.concat("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
在这些情况下,最佳实践和绩效的一般规则是什么?我对的假设正确吗?它真的不应该被使用吗?
优化由编译器自动完成。
Java2编译器将自动转换以下内容:
String s = s1 + s2;
到
String s = (new StringBuffer()).append(s1).append(s2).toString();
直接摘自Java最佳实践网站上的甲骨文。
编译器优化了连接。
所以
int a = 1;
String s = "Hello " + a;
变成
new StringBuilder(). append("Hello"). append(1). toString();
这里有一个很好的主题解释了为什么应该使用运算符。
String s = s1 + s2
在幕后,这被翻译成:
String s = new StringBuilder(s1).append(s2).toString();
想象一下,如果这里有s1 s2
,它会增加多少额外的工作:
stringBuilder.append(s1 + s2)
而不是:
stringBuilder.append(s1).append(s2)
值得注意的是:
String s = s1 + s2 + s3 + ... +sN
翻译为:
String s = new StringBuilder(s1).append(s2).append(s3)...apend(sN).toString();
String s = s1.concat(s2);
String
创建可以同时适合s1
和s2
的char[]
数组。将s1
和s2
内容复制到这个新数组。实际上需要比操作员更少的工作。
维护一个内部char[]
数组,该数组在需要时增长。如果内部字符足够大,则不会创建额外的char[]
。
stringBuilder.append(s1.concat(s2))
性能也很差,因为s1.concat(s2)
创建了一个额外的char[]
数组,并将s1
和s2
复制到它,只是为了将新数组内容复制到内部StringBuilder
char[]
.
也就是说,您应该一直使用append()
,并附加原始字符串(您的第一个代码片段是正确的)。
问题内容: 我试图了解什么是最佳实践,以及为什么要在不同情况下串联字符串文字和变量。例如,如果我有这样的代码 这是这样做的方式吗?从这篇文章中,我注意到Strings上的运算符创建了一个StringBuilder的新实例,连接了操作数,并返回了String转换,这似乎比仅仅调用还要多;所以如果这是真的,那是不可能的。但是那又如何呢?是否适合用于每个串联?或仅用于变量,文字可以追加吗? 应对这些情况
Overview This article discusses performance and reliability best practices for Express applications deployed to production. This topic clearly falls into the “devops” world, spanning both traditional
我有一个Java的应用程序,我正在使用JSoup库进行一些网络抓取。我正在使用该库,它返回了其中6个字符串的集合。我需要将这6个随机字符串映射到对象的属性。我知道字符串的顺序,以及哪个数字映射到哪个属性。我觉得我的方法不是处理这个问题的最佳方法。感觉很失败,易读性很差,我只是想知道是否有更好的方法来做到这一点。我在考虑单独使用枚举或其他东西。长话短说,这是一个代码片段。感谢您的任何帮助。
性能与体验是前端的核心竞争力,是最直观反应页面是否好用、易用的标准。用户花在页面上的时间不应该是在等待页面加载和响应,而是使用和顺畅浏览的时间,因此如何提升页面性能和体验,让页面更快的可交互、浏览滚动更顺畅,是需要你持续的研究、优化、推进的。在 Rax 不断应用发展以及成熟的过程中,沉淀总结了一系列的性能体验的措施和最佳实践,通过这些,可以帮助你大幅提高页面的各项性能。 加载性能 统计口径 加载性
问题内容: 我正在使用Hibernate 3编写Web应用程序。 所以,过了一会儿,我注意到有些东西很慢。因此,我测试了Hibernate Profiler,发现Hibernate将无理地进行许多数据库调用以简化操作。原因当然是我加载了一个对象(该对象有几个“父母”),而这些“父母”还有其他“父母”。因此,即使我只需要基本对象,从根本上来说,hibernate都会加载它们。好的,所以我研究了延迟加
1.1 前言 本文档主要通过实例指导如何在HPB主网上发布智能合约教程。 文档阅读人员:社区开发人员、测试人员、运维人员。 1.2 学习准备 1.2.1 Solidity语言 Solidity是一种开源的智能合约高级语言,可以运行支持开源的Ethereum虚拟机(EVM)之上。 具体的语言介绍和学习入门,在以下的网址中有详细介绍: https://solidity.readthedocs.io/e