将对象传递给类,它们只是引用原始对象吗?

时间:2015-05-15 12:24:59

标签: java

此类包含characters内的所有objectslevel

CollisionListener是一个接口,只要角色与另一个对象发生碰撞,就会调用CollisionListener.beginContact()

我想知道,因为我将level传递给CollisionListener,这是否意味着2个对象存储在内存中?

private Level level内的CollisionListener只是对原始level的引用?这是如何由JVM内部处理的?

因为我在level内修改CollisionListener,原来的level也会更新。

public class Level extends World {

    private Player player;
    private Enemy enemy;

    public Level(){

        this.setContactListener(
            new CollisionListener(this));

        player = new Player();
        enemy = new Enemy();
    }

    /**
     * Move characters
     */
    public update(){

        player.update();
        enemy.update();
    }
}

这是interface,已添加到我的Level对象中。它需要引用Level对象,因此可以调用level.doSomething()

public class CollisionListener implements ContactListener{

    private Level level;

    public CollisionListener(Level level){

        this.level = level;
    }

    public void beginContact(Contact contact) {

        this.level.doSomething();
    }

    /* other interface methods .. */
}

1 个答案:

答案 0 :(得分:0)

  

或者CollisionListener中的私有级别只是对原始级别的引用?这是如何由JVM内部处理的?

当然是。您始终只处理对象的引用并复制它们。就C / C ++而言,您可以将引用与指针进行比较。

  

因为当我在CollisionListener中修改级别时,原始级别也会更新。

如果您不希望这种情况发生,请创建Level实例的副本,例如使用Clonable界面。