【发布时间】:2013-10-08 02:27:20
【问题描述】:
假设我有这个 Java 代码(中期审查!):
public class A {
public int key;
}
public class B extends A {
}
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;
x = y;
}
public static void main(String[] args) {
A p = new A();
p.key = 3;
B q = new B();
q.key = 10;
f(p);
f(q);
p = q;
f(p);
System.out.println(p.key);
}
}
我不确定我是否正确理解 p = q。到目前为止,这是我的理解:因为 B 扩展了 A,所以允许此操作,但它不会使 p 和 q 指向同一个对象。相反,它更新了 p 的键值,但它仍然属于 A 类。这就是为什么 f(p) 最后返回 11 的原因。这与我之前认为我对 Java 的了解不相符,因此将不胜感激。
例如,如果我有 int a = 4 和 int b = 3,那么我会这样做:
a = b;
b++;
return a;
a 将返回 3,即使它应该指向 b 指向的同一事物?
请指教。
【问题讨论】:
-
基元的处理方式不同。如果您在示例中使用 Integer 而不是 int,它将按预期工作。
-
在这里查看第二个答案:stackoverflow.com/questions/869033/…