我在BlackBerry Java Development, Best Practices中找到了以下代码示例。有人可以解释下面相同代码的含义吗?这个代码示例中的内容是什么?
Avoiding StringBuffer.append (StringBuffer)
要将String缓冲区附加到另一个,BlackBerry®JavaApplication应使用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));
}
答案 0 :(得分:0)
这意味着StringBuffer
类未得到有效实施。 Java字符串应该是不可变的,这就是StringBuffer的用途。但是,使用StringBuffer.append()
时,您使用的StringBuffer类效率不高,因此您需要使用net.rim.device.api.util.StringUtilities
。这就是代码正在做的事情,将该类的使用封装在一个新的append()方法中。
答案 1 :(得分:0)
StringBuffer不为append()方法提供另一个StringBuffer的重载。这意味着开发人员可能会使用StringBuffer.append(String str)
并在第二个StringBuffer上调用.toString()。这需要将第二个缓冲区转换为不可变的字符串,然后将字符串中的字符附加到第一个StringBuffer。因此,第二个缓冲区中的每个字符都被触摸两次,并且只是为了将字符传输到第一个StringBuffer而不必要地分配字符串。
这样做的有效方法是将每个字符从第二个缓冲区复制到第一个缓冲区的末尾。但是,StringBuffer没有提供任何简单的方法。因此建议使用StringUtilities.append(StringBuffer,StringBuffer),它能够直接读取第二个缓冲区中的字符,而无需将它们复制到中间集合中。
这节省了额外复制的运行时,分配临时String所需的运行时以及分配临时字符串所需的内存。