gpt4 book ai didi

java - 当使用 = 将一个对象分配给另一个对象时,就会发生复制类型

转载 作者:行者123 更新时间:2023-12-01 23:34:10 29 4
gpt4 key购买 nike

为什么最后一条语句的输出是1010?这是哪种类型的复制?深还是浅?

public class P {
int k;
public P() {
}

public static void main(String[] args) {
P p = new P();
P p1 = new P();
p1.k = 4;
p.k = 3;
System.out.println("" + p1.k + p.k);
p1 = p;
System.out.println("" + p1.k + p.k);
p.k = 9;
p1.k = 10;
System.out.println("" + p1.k + p.k);
}
}

最佳答案

您正在使用对象引用。语句 p1 = p 使 p1p 引用同一个对象。这就是为什么您会得到输出 1010:因为您编辑了 p1 所引用的对象,该对象与 p 是同一个对象是一个引用。

考虑这个例子。在 p = p1 之前,p1 引用 o2(黑色箭头)。该语句之后,它引用 o1(红色箭头)。

Object References

至于判断这是深拷贝还是浅拷贝,你可以自己轻松测试一下。创建一个包含对象引用的类:假设类 A

public class Main {
public static void main(String[] args) {
P p = new P(3);
P p1 = new P(4);
A a = new A(p);
A a1 = new A(p1);
System.out.println("a: " + a.p.k);
System.out.println("a1: " + a1.p.k);
a1 = a;
System.out.println("a: " + a.p.k);
System.out.println("a1: " + a1.p.k);
}
}

class A {
public P p;

public A(P p) {
this.p = p;
}
}

class P {
public int k;

public P(int k) {
this.k = k;
}
}

输出为:

a:  3
a1: 4
a: 3
a1: 3

这意味着它是浅拷贝。

关于java - 当使用 = 将一个对象分配给另一个对象时,就会发生复制类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18942223/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com