我正在制作一款游戏,我需要判断有多少辆汽车正在接触玩家的汽车,以及哪些汽车。我的计划是创建一个 List
,并在必要时添加和删除汽车。
这是我的问题。我的 Car
类创建起来非常昂贵(处理能力方面)。创建一辆汽车的引用要花多少钱?我知道在 C++ 中我所说的被称为指针。这是代码示例:
Car newCar = new Car(); // expensive
Car carCopy = newCar.clone(); // expensive
Car referenceNewCar = newCar; // expensive?
referenceNewCar
应该指向内存中与 newCar
相同的位置,对吧?所以它不必初始化任何东西,并且说 newCar.changeMemberVariableTo(1)
与 referenceNewCar.changeMemberVariableTo(1)
相同;无论哪种方式,newCar
和 referenceNewCar
都会受到影响,因为它们指向内存中的同一个位置。
我假设创建一个新的引用比一个全新的 Car
更便宜。它快多少?如果创建一个新的 Car
需要 3 秒,那么创建对同一辆车的新引用是否几乎是瞬间的?
提前致谢。
最佳答案
将引用从一个变量复制到另一个变量非常便宜。它可能与复制 int
或 long
值一样便宜(取决于所讨论的 JVM 的一些情况)。
您所得到的只是两个具有完全相同值的变量 - 一个引用。该值将非常小(在大多数实现中为 4 或 8 个字节)并且复制它通常不需要比复制字节更多的工作。
(我暗暗怀疑一些 JVM 可能比这更聪明一些;为了垃圾收集,一些 JVM 可能会更新最老一代的标志例如,对特定对象的引用 - 但这会因实现而异,无论如何我的内存可能是错误的。)
关于java - 对已创建对象进行新引用的处理成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902720/