java - Java 不是通过引用传递非原始类型吗

标签 java pass-by-reference

在下面的代码中,我假设两个对象都引用了同一个对象,但下面的示例表明我错了。抱歉,如果它是重复的。

    class A {
        public String a;
        public void set(String a) {
            this.a = a;
        }
    }

    class B {
        public String b;
        public void set(String b) {
            this.b = b;
        }
    }

    A aC = new A();
    B bC = new B();

    String str = "aaa";

    aC.set(str);
    bC.set(aC.a);

    aC.a += "a";

    System.out.println(aC.a);
    System.out.println(bC.b);

最佳答案

让你困惑的是你的想法

aC.a += "a";

修改aC.a引用的String对象的状态。事实并非如此。字符串是不可变的,上面的代码行创建一个新的 String 对象并将其分配给 aC.a,保留对原始对象的所有其他引用不变。

使用StringBuilder进行相同的测试,然后调用

aC.a.append("a");

你会得到不同的结果。

关于java - Java 不是通过引用传递非原始类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313884/

相关文章:

java - 在 Java 中拆分命令行

c++ - 为什么要将对象的拷贝作为函数的参数?为什么 const ref 不是参数的默认方式?

c++ - 通过引用传递 cv::Mat 还是返回它?

java - 获取分配给 Kafka 分区的消费者或客户端 ID

Mac OS 10.5 上的 Java 1.6 SDK

java - 使用引用调用交换两个数字

javascript - 处理多变量操作的更好方法?

c++ - 多态性和 shared_ptr 通过引用传递

java.lang.NoSuchFieldError : APPDEFAULT 错误

java - Google libphone 号码,用于获取相同国家代码的国家名称