java - 对 Java StringBuffer 的工作原理感到困惑吗?

标签 java stringbuffer

我现在正在做一项作业,对此感到困惑。给出的代码很简单:

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/

相关文章:

java - 将 SVG 转换为 PDF

java - 让 GPG 解密在 Java 中工作(Bouncy CaSTLe)

java - java中可变字符串和不可变字符串有什么区别

java - StringBuffer 的最大大小

java - 从 StringBuffer 中删除某些行

java - 在java中只调用一次相同的方法

java - 按日期对 ArrayList<String> 进行排序,不包括字符串的前半部分

java - Maven 2依赖问题

java - 将字符串插入另一个字符串中,从一个索引到字符串之间的另一个索引