我有以下java代码:
public class HelloWorld
{
static Baumhaus bauHaus(int hoehe, int breite)
{
Baumhaus b = new Baumhaus();
b.hoehe = hoehe;
b.breite = breite;
return b;
}
static Baumhaus machBreiter(Baumhaus b)
{
Baumhaus bb = new Baumhaus();
bb.hoehe = b.hoehe;
bb.breite = b.breite + 1;
return bb;
}
static Baumhaus machHoeher(Baumhaus b)
{
b.hoehe++;
return b;
}
public static void main(String[] args)
{
Baumhaus b = bauHaus(2, 3);
Baumhaus c = machBreiter(b);
c.nachbar = b;
Baumhaus d = machHoeher(b);
d.nachbar = b;
++c.hoehe;
Baumhaus e = machHoeher(b);
e.nachbar = c;
e.breite = b.breite - 1; // WHY DOES b.breite GETS DECREASED BY 1 ???
c.hoehe++;
c.breite -= 2;
boolean bUndCBenachbart = (b.nachbar == c || c.nachbar == b);
}
}
class Baumhaus
{
public int hoehe;
public int breite;
public Baumhaus nachbar;
public int nummer = ++naechsteNummer;
static int naechsteNummer = 0;
}
请参阅注释行(e.breite = b.breite - 1;
)
我无法理解为什么变量b.breite的值会发生变化。我正在阅读有关面向对象编程(Java)的文档,但我仍然在摸不着头脑。请帮帮我
注意:我不知道如何向谷歌描述我的问题,所以我找不到任何关于我的问题的解决方案。如果重复,我很抱歉
提前致谢:)
答案 0 :(得分:4)
因为e == b
。
e
定义为Baumhaus e = machHoeher(b);
和
static Baumhaus machHoeher(Baumhaus b)
{
b.hoehe++;
return b;
}
答案 1 :(得分:2)
不会创建它们的不同副本。
方法:
static Baumhaus machHoeher(Baumhaus b) {
b.hoehe++;
return b;
}
返回它作为参数返回的同一对象, 所以在代码行
Baumhaus e = machHoeher(b);
e
对象是b
的引用,递减e
也会减少b
答案 2 :(得分:1)
问题是您在machHoeher函数中返回相同的对象。函数返回传入的同一个对象。所以你有两个变量(e和b)指向内存中的同一个对象。
在machBreiter中,您正在创建一个新对象,递增该符号,然后返回该新对象。
你应该在machHoeher中做同样的事情:
这将确保当你执行e.breite = b.breite - 1时,e和b是单独的对象而b.breite不会被更改。