我创建了4个类,一个MainP
类,其他Ex2
,Ex3
和Ex4
(3和4扩展为2)。当我从一个对象中调用一个减少另一个对象的int
变量的对象时,它只在第一次调用时才会这样做。
这些是类:
练习2:
protected int par;
public int getPar() {
return par;
}
public void setPar(int par) {
this.par = par;
}
实例3:
private int par;
public Ex3(int par) {
this.par = par;
}
public void bar(Ex2 b) {
b.setPar(par - 10);
}
public int getPar() {
return par;
}
public void setPar(int par) {
this.par = par;
}
Ex4与Ex3相同。
主要:
public class MainP {
public static void main(String[] args) {
Ex3 kaka = new Ex3(100);
Ex4 tana = new Ex4(100);
kaka.bar(tana);
System.out.println(tana.getPar());
kaka.bar(tana);
System.out.println(tana.getPar());
}
}
输出:
90
90
我不明白为什么par
在第一次通话中减少而在第二次通话时停止。我想它已经以某种方式进行了校准,但我不明白为什么。
编辑: 好吧,我理解我的愚蠢错误,但我有一个新的错误。 我改变了方法:
public void bar(Ex2 b){
b.setPar(b.par-=10);
}
现在我的输出是:
-10
-20
为什么方法会将b.par更改为-10?如果我这样做: tana.setPar(tana.par- = 10);在main方法中,将变量更改为public,它不会将tana的值更改为-10,并将其从100减少。
答案 0 :(得分:3)
public void bar(Ex2 b){
b.setPar(par - 10);
}
在此设置为b
par - 10
的值,其中par
不是b
的字段。因为它没有改变你2次,所以将b
par
字段设置为相同的值 - 90。
答案 1 :(得分:1)
Ex3
类型的对象,其值par
等于100
。Ex4
类型的对象,其值par
等于100
。bar()
上的kaka
,您将par
的{{1}}值设置为tana
(kaka.par
) - 100
,10
现在是tana.par
。90
致电bar()
,您将kaka
的{{1}}值设置为par
(仍为tana
}}) - kaka.par
,所以100
再次10
。只需尝试使用笔和纸来追踪您的代码,问题就会很快显现出来。
答案 2 :(得分:0)
public void bar(Ex2 b){
b.setPar(par-10);
}
如果没有前缀,par
会引用this.par
,而不是b.par
,所以基本上,您是在说:
b.par = this.par - 10;
并且this.par
在两次通话之间都没有变化,因此您自然会两次都看到90
。
你可能想要:
b.par = b.par - 10;
或
b.par -= 10;
答案 3 :(得分:0)
让我们分析一下代码: 你创造了卡卡和塔纳,他们都有par = 100。
然后你告诉卡卡设置塔纳的标准杆。 (kaka' s)par-10 = 100 - 10 = 90
然后你再次告诉卡卡设置塔纳的标准杆。 但卡卡的标准杆仍然是相同的。 所以你设置100 - 10 = 90。 你不会减少卡卡的标准杆
答案 4 :(得分:0)
你打电话给b.setPar(par-10);
'帕'是卡卡的一个例子。 b.setPar(par-10)正在更新' par'塔纳实例中的字段。你永远不会真正更新' par'在卡卡的实例中的字段。当您进行第二次通话时,您实际上只是执行两次相同的计算,给出相同的答案。