Blackberry 黑莓J2ME高效编码指南?有人能详细说明一下吗?

Blackberry 黑莓J2ME高效编码指南?有人能详细说明一下吗?,blackberry,java-me,Blackberry,Java Me,我在中找到了代码示例。有人能解释一下下面相同的代码是什么意思吗?代码示例中的这一点指向什么 要将字符串缓冲区附加到另一个缓冲区,BlackBerry®Java应用程序应使用net.rim.device.api.util.StringUtilities.append(StringBuffer dst,StringBuffer src[,int offset,int length])。 代码示例 public synchronized StringBuffer append(Object obj)

我在中找到了代码示例。有人能解释一下下面相同的代码是什么意思吗?代码示例中的这一点指向什么

要将字符串缓冲区附加到另一个缓冲区,BlackBerry®Java应用程序应使用
net.rim.device.api.util.StringUtilities.append(StringBuffer dst,StringBuffer src[,int offset,int length])。

代码示例

public synchronized StringBuffer append(Object obj) {
    if (obj instanceof StringBuffer) {
        StringBuffer sb = (StringBuffer)obj;
        net.rim.device.api.util.StringUtilities.append( this, sb, 0, sb )
        return this;
    }
    return append(String.valueOf(obj));
}

这意味着
StringBuffer
类没有有效地实现。Java字符串应该是不可变的,这就是StringBuffer的用途。但是,使用
StringBuffer.append()
时,您使用的StringBuffer类效率不高,因此需要使用
net.rim.device.api.util.StringUtilities
。代码就是这样做的,将该类的使用封装在一个新的append()方法中。

StringBuffer不会为接受另一个StringBuffer的append()方法提供重载。这意味着开发人员可能会使用
StringBuffer.append(String str)
并在第二个StringBuffer上调用.toString()。这需要将第二个缓冲区转换为不可变的字符串,然后将字符串中的字符追加到第一个StringBuffer。因此,第二个缓冲区中的每个字符都会被触摸两次,并且只为将字符传输到第一个StringBuffer而对字符串进行不必要的分配

有效的方法是将第二个缓冲区中的每个字符复制到第一个缓冲区的末尾。然而,StringBuffer并没有提供任何简单的方法。因此,建议使用StringUtilities.append(StringBuffer,StringBuffer),它能够直接从第二个缓冲区读取字符,而无需将它们复制到中间集合中

这将节省额外复制的运行时、分配临时字符串所需的运行时以及分配临时字符串所需的内存