我有一个名为Time的类,它包含实例具有“hour”和“minute”参数的对象。在该类中有一个名为addMinutes的方法,它接受一个整数并将该分钟数添加到对象的“小时”和“分钟”参数中。
我在另一个名为Exercise的类中有一个构造函数方法,该类应该使用以下参数创建一个对象: 名为extype的字符串对象 int对象叫做min 时间对象叫做开始 时间对象名为end
我希望构造函数初始化start,然后使用Time中的addMinutes方法添加该分钟数并调用该结束。但是当我使用它时,即使它们是单独的变量,也会在结束时更新开始。
这是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 =新练习(“跳舞”,90岁,第一次);
15:45
15:45
17:15 17:15
所以当我使用end.addMinutes(min)所有变量时,start,end甚至s都会更新为我想要的结束时间。对此有何见解?
感谢。
答案 0 :(得分:1)
这是因为Java使用了对象的引用,而不是valules
因此,当你执行start = s
时,它不会将start设置为s的值,而是将start设置为与s相同的对象。等等另一个人。
然后,当你在其中任何一个上调用一个方法(即:start,end或s)时,你只能在一个对象上调用这个方法,由这三个变量引用。
答案 1 :(得分:0)
执行end = s;
时,您将end
引用的对象设置为s
引用的对象。因此,当您更改对象时,它将反映在两个引用中。如果您希望它们不同,则必须将它们设置为不同的变量。
给你的班级一个"克隆"创建相同类型的新对象的方法,并将新对象的所有内部变量设置为旧对象的内部变量。然后克隆而不是使用' =',您将拥有单独的对象。
答案 2 :(得分:0)
这是因为Java中的所有对象都是通过引用隐含的。 如果你说end等于start,那么它们都引用同一个对象,所以更新一个会导致更新另一个。
您可以执行以下操作:让addMinutes()返回具有指定分钟和小时的新Time对象。然后不要陈述end=start
,但要这样做:
Time end;
end = start.addMinutes(m);
这应该有效。
祝你好运!答案 3 :(得分:0)
在java中,存储对象的变量实际上是存储对象的“引用”。换句话说,如果您有以下内容:
Object obj;
cpy = obj;
obj
和copy
都将指向SAME对象。如果您更新它们,则会受到影响。
答案 4 :(得分:0)
为什么Java使用相同的值更新多个变量?
不是。它正在更新单个对象,并且您有多个变量都引用该对象,因此无论您使用哪个变量来获取对象内部的值,您总是得到相同的值。