【发布时间】:2020-02-20 20:49:40
【问题描述】:
我一直在跟踪这个并且总是发现最后一个答案是 103,但是当我运行程序时,它是 13。返回值没有被添加到methodThree 中的 t.sum。
我已尝试将行修改为
t.sum += methodTwo() + 7;
但答案是一样的。执行此行前后 t.sum 的值为 12。为什么这行t.sum的值不变?
class Test {
int x = 2;
int y = 4;
int sum = 6;
Test t;
void methodOne() {
t = new Test();
t.sum += sum;
System.out.println(t.sum);
}
int methodTwo() {
System.out.println(++x);
methodOne();
System.out.println(y++);
return x * y * sum;
}
int methodThree() {
t.sum += methodTwo();
System.out.println(++t.sum);
return --sum;
}
public static void main(String[] args) {
Test t = new Test();
t.methodOne();
Test t2 = new Test();
t2.methodOne();
t2.methodThree();
}
}
【问题讨论】:
-
这是使用调试器逐步执行程序的绝佳机会。
-
您确定您正在关注您在
t上更改的变量、t2上的哪些变量以及您在this上更改的哪些变量?因为根本不清楚您要做什么。 -
methodOne的第一行是t = new Test();,所以每次调用methodOne时总是丢弃当前的t。为什么Test包含Test的实例? -
请注意
methodOne(由methodTwo调用)正在创建一个新实例并将其分配给t- 所以t.sum在调用之后是另一个值,然后是之前(结果添加到先前一)....(如何从不编写代码的一个很好的例子)