gpt4 book ai didi

Java作业

转载 作者:行者123 更新时间:2023-11-29 05:47:22 24 4
gpt4 key购买 nike

我正在为考试而学习,我正在查看一个示例程序,但我很困惑。这是代码:

public class Problem1 {
public static void f(A X)
{
A Y = X;
Y.key = X.key + 1;
}

public static void f(B X)
{
B Y = new B();
Y.key = X.key + 2; //Y.key = 12
X = Y; //X points to Y?
}

public static void main(String[] args)
{
A P = new A();
P.key = 3;
B Q = new B();
Q.key = 10;
f(P);
System.out.println(P.key);
f(Q);
System.out.println(Q.key);
P = Q;
f(P);
System.out.println(P.key);
}
}

class A
{
public int key;
}
class B extends A
{

}

我对 f(P) 没意见。我的问题是 f(Q)。我得到一个名为 Y 的新 B,它的键是 12。我的问题是,X = Y 不应该将 X 指向 Y 吗?将 Q 的键值设置为 12 而不是 10?代码打印出 4,10,11。我很困惑为什么它打印 10 而不是 12。

最佳答案

在 java 中,类类型的每个变量,如 P、Q、X 等,都是对对象(或 null)的引用。你可以想象内存中某处有一个对象,变量指向它:
P ----->(P 对象)
当您调用 f(P) 时,第一个 f 方法接收到对同一对象的引用,但它是不同的引用:
(main) P -----> (P object)
(f) X -----> (P 对象)
然后 f 又做了一个引用:
(f) Y -----> (P 对象)当它更改 key 时,它会在同一个对象中更改它。

在第二种情况下,f(Q),第二个 f 方法再次接收到对同一对象的(不同的)引用:
(main) Q -----> (Q object)
(f) X -----> (Q对象)
然后它创建一个新对象:(f) Y ----->(Y 对象)
然后它更改此对象中的键,并将 X 变量设置为指向此对象:
(f) X -----> (Y object, key=12)
然而,在您的 main 方法中,Q 变量没有改变:
(main) Q -----> (Q object)
因为 X 只是 Q 的一个副本,它不是 Q 本身。所以Q还是指向Q对象,没有修改,修改了Y对象。

关于Java作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375324/

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