在java中,StringBuilder.append和为StringBuilder赋值之间是否存在性能差异
我有一个在java中,StringBuilder.append和为StringBuilder赋值之间是否存在性能差异,java,performance,Java,Performance,我有一个StringBuilder a。我必须将a的内容附加到StringBuilder b。如果b为null,则分配b=a,否则分配b.append(a.toString()) 检查StringBuilder是否为null时是否存在性能差异 b=a将具有更高的性能,因为它只是分配一个引用b.append是一个方法调用,需要复制字符,并(可能)创建一个新的字符数组 问题是这是否是你想要的。请注意,a和b都是局部变量,因此如果使用b=a,则可以使用b,直到方法结束。但是,它不会影响调用者 相反,b
StringBuilder a
。我必须将a
的内容附加到StringBuilder b
。如果b
为null
,则分配b=a
,否则分配b.append(a.toString())
检查StringBuilder
是否为null
时是否存在性能差异
b=a
将具有更高的性能,因为它只是分配一个引用b.append
是一个方法调用,需要复制字符,并(可能)创建一个新的字符数组
问题是这是否是你想要的。请注意,a
和b
都是局部变量,因此如果使用b=a
,则可以使用b
,直到方法结束。但是,它不会影响调用者
相反,
b.append
在适当的位置修改对象。没有创建新对象,因此此变异在方法外部可见。请正确格式化代码并将其突出显示为代码。“b=a”根本不起作用,中的更改仅在您自己的方法内部可见,它对外部代码没有任何作用,而外部代码将ref插入a和bhow中,当这两个代码执行不同的操作时(除非第一个StringBuilder为空),您会担心性能问题吗?我没有得到,相反,b.append会在适当的位置修改对象。没有创建新对象,因此此变异在方法外部可见
。它仍然是一个局部变量,对吗?因此,它不能在被调用方的作用域之外被引用,因此不会被引用visible@darkie15:StringBuilder在方法外部创建并传入。所以外面会看到他们发生了什么(在追加案例中)。@Thilo:Aahh明白了。遗漏了参数。
method_a(StringBuilder a, StringBuilder b) {
if (b != null) {
b.append(a.toString();
} else {
b=a;
}
}