我现在正在做一项作业,对此感到困惑。给出的代码很简单:
public class Variables{
public static void main(String[ ] args){
StringBuffer b = "ghi";
f(b);
System.out.println(b):
}
public static void f(StringBuffer p){
p.concat("jkl");
}
}
问题只是询问 print 语句的输出是什么。我的第一个想法只是“ghi”,但这是不正确的。如果方法 f 将 b 作为参数并将其设置为 p,那么 .concat() 如何修改 b?我已经阅读了 StringBuffer 文档,但不明白为什么这不会导致 b 等于“ghi”而 p 是“ghijkl”。
基本上,p 上调用的 .concat() 方法是如何修改 b 的?
最佳答案
首先,您需要正确创建一个StringBuffer。
StringBuffer foo = new StringBuffer("some string");
您将一个对象传递给了一个函数。 Java 将对象作为引用传递(引用本身当然是按值传递的)。请参阅:Is Java "pass-by-reference" or "pass-by-value"?
由于您拥有对 StringBuffer 的引用而不是它的副本,因此您实际上正在修改同一个对象,就像在 main 中一样。
关于java - 对 Java StringBuffer 的工作原理感到困惑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26373012/