有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将对象传递到类中,它们只是对原始对象的引用吗?

这个类包含一个level中的所有charactersobjects

CollisionListener是一个接口,每当角色与另一个对象发生冲突时都会调用CollisionListener.beginContact()

我想知道,既然我将level传递到CollisionListener,这是否意味着内存中存储了两个对象

或者private Level levelCollisionListener只是对原始level的引用?JVM如何在内部处理这个问题

因为当我在CollisionListener内修改level时,原始的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) 个答案

  1. # 1 楼答案

    Or is private Level level inside CollisionListener just a reference to original level? How is this handled internally by JVM?

    当然是。您总是只处理对对象的引用并复制这些引用。在C/C++中,可以将引用与指针进行比较

    Since when I modify level inside CollisionListener, the original level is updated too.

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