我有一个名为 Time 的类,其中包含实例具有“小时”和“分钟”参数的对象。该类中有一个名为 addMinutes 的方法,它接受一个整数并将该分钟数添加到对象的“小时”和“分钟”参数中。
我在另一个名为“Exercise”的类中有一个构造函数方法,该方法应该使用以下参数创建一个对象: 称为 extype 的字符串对象 名为 min 的 int 对象 称为 start 的时间对象 称为结束的时间对象
我希望构造函数初始化 start,然后使用 Time 中的 addMinutes 方法添加分钟数并调用 end。但是当我使用它时,即使它们是单独的变量,开头也会随结尾更新。
这是 addMinutes 方法
public void addMinutes(int mins) {
this.mins += mins;
if (this.mins >= 60) {
addHours(this.mins / 60);
this.mins = this.mins % 60;
}
这是尝试使用它和输出的示例
public Exercise(String e, int m, Time s) {
extype = e;
min = m;
start = s;
System.out.println(start);
end = s;
System.out.println(start);
end.addMinutes(min);
System.out.print(s);
start = s;
System.out.println(start);
使用 e = "Dancing"、m = 90 和 S = 15:45 运行此程序的输出
练习 e1 = new 练习("跳舞",90,第一次);
15:45
15:45
17:15 17:15
因此,当我使用 end.addMinutes(min) 时,所有变量、开始、结束甚至 s 都会更新为我想要的结束时间。对此有什么见解吗?
谢谢。
最佳答案
这是因为 Java 使用对象的引用,而不是值
因此,当您执行 start = s
时,它不会将 start 设置为 s 的值,而是将 start 设置为与 s 相同的对象。其他作业依此类推。
然后,当您对其中任何一个(即:start、end 或 s)调用方法时,您将在一个且仅一个由这三个变量引用的对象上调用此方法。
关于java - 为什么 Java 会更新多个具有相同值的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725554/