次のJava言語のプログラムで、A.foo(2) を呼び出したときの戻り値はいくつか。
class A {
static int foo(int n) {
B x = new B();
int r = n;
r = x.bar(r);
B y = new B();
r += y.bar(r);
return r;
}
}
class B {
static int p = 3;
int x;
public B() {
x = p;
}
public int bar(int z) {
++p;
return x - z;
}
}
@ 0 A 1 B 2 C 3 D 4
D
以下の通り実行される。
class A {
static int foo(2) {
B x = new B(); ・・・クラスBで x を定義
int r = 2;
r = x.bar(2); ・・・(以下の*1より r = 1)
B y = newB(); ・・・クラスBで y を定義
r += y.bar(1); ・・・(以下の*2より r = r + 3 = 1 + 3)
return 4;
}
}
4が戻り値である。
(*1)
x.bar(2)は 以下のように計算される。
public B() {
x = p; ・・・ 最初は static int p = 3 だから、x = 3
}
public int bar(2) {
++p; ・・・1up して p = 4 になる ・・・(1)
return 3 - 2; ・・・1が返る。
(*2)
y.bar(1)は、 以下のように計算される。
public B() {
x = p; ・・・ (1)で、p = 4 になっているから、x = 4
}
public int bar(1) {
++p; ・・・1up して p = 5
return 4 - 1; ・・・3が返る。
V−3 | 目次 | V−5 |