为什么它的价值会改变?

时间:2018-02-14 22:43:09

标签: java object variables reference

我有以下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)的文档,但我仍然在摸不着头脑。请帮帮我

注意:我不知道如何向谷歌描述我的问题,所以我找不到任何关于我的问题的解决方案。如果重复,我很抱歉

提前致谢:)

3 个答案:

答案 0 :(得分:4)

因为e == b

e定义为Baumhaus e = machHoeher(b);

static Baumhaus machHoeher(Baumhaus b)
{
    b.hoehe++;
    return b;
}

答案 1 :(得分:2)

java分配对象中的

不会创建它们的不同副本。

方法:

static Baumhaus machHoeher(Baumhaus b) {
    b.hoehe++;
    return b;
}

返回它作为参数返回的同一对象, 所以在代码行

Baumhaus e = machHoeher(b);

e对象是b的引用,递减e也会减少b

答案 2 :(得分:1)

问题是您在machHoeher函数中返回相同的对象。函数返回传入的同一个对象。所以你有两个变量(e和b)指向内存中的同一个对象。

在machBreiter中,您正在创建一个新对象,递增该符号,然后返回该新对象。

你应该在machHoeher中做同样的事情:

  • 创建新对象
  • 介绍hoehe
  • 返回新对象。

这将确保当你执行e.breite = b.breite - 1时,e和b是单独的对象而b.breite不会被更改。