我在 BlackBerry Java Development, Best Practices 中找到了以下代码示例.有人可以解释以下相同代码的含义吗?代码示例中的 this 指向什么?
Avoiding StringBuffer.append (StringBuffer)
要将一个字符串缓冲区附加到另一个缓冲区,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 不为采用另一个 StringBuffer 的 append() 方法提供重载。这意味着开发人员可能会使用 StringBuffer.append(String str)
并在第二个 StringBuffer 上调用 .toString()。这需要将第二个缓冲区转换为不可变的字符串,然后将字符串中的字符附加到第一个 StringBuffer。因此,第二个缓冲区中的每个字符都被触摸了两次,并且为了将字符传输到第一个 StringBuffer 而不必要地分配了 String。
执行此操作的有效方法是将每个字符从第二个缓冲区复制到第一个缓冲区的末尾。然而,StringBuffer 没有提供任何简单的方法来做到这一点。因此,建议使用 StringUtilities.append(StringBuffer, StringBuffer) ,它能够直接从第二个缓冲区读取字符,而无需将它们复制到中间集合中。
这节省了额外复制的运行时间、分配临时字符串所需的运行时间以及分配临时字符串所需的内存。
关于BlackBerry J2ME 高效编码指南?有人可以详细说明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187244/