【发布时间】:2018-01-12 00:39:35
【问题描述】:
public class incrementer {
public incrementer () {
counter =1;
}
public incrementer (int startValue) {
counter = startValue;
}
public int nextValue() {
int temp = counter;
counter++;
return (temp);
}
private int counter;
}
import acm.program.*;
public class useCounter extends ConsoleProgram {
public void run() {
incrementer count1 = new incrementer();
incrementer count2 = new incrementer(1000);
println("Five values for count1 :");
countFiveTimes(count1);
println("Five values for count2 :");
countFiveTimes(count2);
println("Another five values for count1 :");
countFiveTimes(count1);
}
private void countFiveTimes(incrementer counter) {
for (int i=0; i<5; i++) {
println(counter.nextValue());
}
}
}
我刚刚了解了在方法调用中将对象作为参数传递的概念。据我了解,useCounter 类的运行如下所示:
创建 count1 = 计数器值为 1 的增量器对象
使用参数count1调用countFiveTimes方法
counter = 计数器值为 1 的增量器对象 //为对象分配新名称以在countFiveTimes方法中使用它//
用对象调用nextvalue方法(此时为计数器,之前为count1)并打印5次返回值。
(第一次运行)
温度 = 1;
计数器 = 2;
返回温度
println(温度);
打印 1
(第二次运行)
温度 = 2;
计数器 = 3;
回温
println(温度)
打印 2
....等等等等。
我将跳过 count2 部分,因为它与我的问题无关。
当运行到达 println("count1 的另外 5 个值:"); 部分,我通常希望这部分课程的运行与第一部分完全相同;也就是说,我希望结果是 1 2 3 4 5 因为我没有看到为 counter1 对象分配新值的代码。(我希望它处于创建它时的相同状态)
我的导师给出的解释是,当您在方法调用中将对象作为参数传递时,您实际上是在传递对象本身,而不是对象的副本。
我觉得这个概念还可以,但问题是:对象的新状态保存在哪里?
它在 useCounter 类中吗?如果是,在哪里?
非常感谢您的帮助,对于我可能在我的问题中造成的任何混淆,我们深表歉意。
编辑: 运行结果 count1 的五个值: 1 2 3 4 5 count2 的五个值: 1000 1001 1002 1003 1004 count1 的另外五个值: 6 7 8 9 10
预期的运行结果
count1 的五个值: 1 2 3 4 5 count2 的五个值: 1000 1001 1002 1003 1004 count1 的另外五个值: 1 2 3 4 5
问题:我假设对象 (count1) 的状态在前五个值之后保存。它保存在哪里?没有代码可以保存时如何保存?
【问题讨论】:
-
以上代码应返回
1 2 3 4 5。你得到了什么? -
这么多的输入,我还是不明白你的问题。 A) 请花时间格式化/缩进所有您的输入(尤其是您的代码)正确。 B) 阅读minimal reproducible example。不要进行冗长的解释。说明会发生什么以及您期望发生什么,最好使用简单的例子,而不是文字描述。
-
当你创建一个“int”对象时,你将它保存在你的 RAM 中,所以,“incrementer”是另一个对象,如“int”、“string”等......它似乎停留在你的公羊,直到你释放它......如果你是那个意思。
标签: java object parameters parameter-passing