gpt4 book ai didi

java - java.lang.StringBuffer可以用ColdFusion中的 "regular"字符串操作逻辑替换吗?

转载 作者:行者123 更新时间:2023-12-02 07:56:38 35 4
gpt4 key购买 nike

我不是 Java 专家;我希望这个列表中更精通 Java 的人可以帮助我。

我当前的服务器上有以下代码。

<cfset var buffer = CreateObject("java", "java.lang.StringBuffer").init("") />
<cfset buffer.append(variables.myVar) />

我正在尝试将这些代码移动到另一台服务器。问题是这个新服务器(共享主机)不允许调用 Java 对象。因此,我将它们更改为以下内容。

<cfset var buffer = "" />
<cfset var buffer = buffer & variables.myVar />

我的问题是,新代码与旧代码等效吗?使用java.lang.StringBuffer有什么优点?

提前致谢,蒙特

最佳答案

不,"new"代码在大量循环中使用时效率较低。

您可以使用数组模拟 StringBuffer。

<cfset var buffer = ArrayNew(1)>
<cfset ArrayAppend(buffer, variables.myVar1)>
<cfset ArrayAppend(buffer, variables.myVar2)>
<!--- more of these --->
<cfset result = ArrayToList(buffer, "")>

但是:如果您不连续连接数百或数千个字符串,则使用 StringBuffer 几乎没有什么好处。在大多数情况下,您可以使用 &

<小时/>

我已经做了一些测试(在带有 Java 1.4 的 ColdFusion 7 服务器上,较新的版本可能得分不同)。

所有时间均以毫秒为单位,结果是 10 次重复的平均值(方括号中的那个除外,因为这实际上需要很长时间)。

以下是迭代连接单个字母 N 次的测量。

iterations   concat   array   cfsave   string                             content   buffer       100        0       0        0        2      1000        4       4        2       22     10000      168      29       33      219    100000   30,781     168      293    1,575

以下是迭代连接长度为 10 的字符串 N 次的结果:

iterations   concat   array   cfsave   string                             content   buffer       100        0       0        0        4      1000       25       0        2       24     10000    1,242      33       31      232    100000 [410,979]    180      373    2,082

请注意,迭代次数越多,字符串越长,基本字符串连接的效率就会迅速降低。其他方法显示出更多的线性行为。

进一步注意,StringBuffer 的性能也与其初始大小相关。如果您将其尺寸设置得太小(例如,通过调用 init("") 而不是 .init(10000)),那么它将被迫重新分配更多空间当它用完时,这也需要时间。为了进行测试,我使用其所需的空间量对其进行了初始化。

关于java - java.lang.StringBuffer可以用ColdFusion中的 "regular"字符串操作逻辑替换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6254442/

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