gpt4 book ai didi

Java:为什么不声明静态而不是传递引用?

转载 作者:搜寻专家 更新时间:2023-11-01 04:00:34 25 4
gpt4 key购买 nike

假设我们想要制作一款您必须收集 gem 的游戏。所以我们需要一个 Gem 类,一个 GemSpawner 类,当然还有 MainActivity 类。

public class MainActivity {
public static void main(String[] args) {

List<Gem> gems = new ArrayList<Gem>();

GemSpawner gs = new GemSpawner(gems);

//...
}
}

在这种情况下,我们创建了一个包含 gem 的列表,并通过其构造函数将其传递给 GemSpawner,因此 gs 可以使用以下方式将 gem 添加到列表中:

gems.add(new Gem(10, 50, "red")); //should represent Xpos, Ypos, and color.

但这不是更好吗:

public class MainActivity {

public static List<Gem> gems = new ArrayList<Gem>();

public static void main(String[] args) {

GemSpawner gs = new GemSpawner();

//...
}
}

现在,GemSpawner (gs) 可以使用以下方式添加 gem :

MainActivity.gems.add(new Gem(10, 50, "red"));

friend 只给我展示和解释了上面的方法,下面的方法是不是更有效率?

最佳答案

效率论点站不住脚。它是一个单一的引用,因此 32 位(如果您使用的是 64 位机器,则为 64 位)在开始时被解析一次,因此它没有任何(可测量的)性能影响。

但是,如果您使用大量静态变量,您的代码设计可能会变得困惑。例如,通过使其成为静态的,没有简单的方法来跟踪正在向您的列表中添加内容的内容(可能是一个深夜来测试您随机添加 gem 然后忘记的东西。几个月后,您无法解决问题为什么这一颗 gem 不断出现!)

这看起来很愚蠢,但通过限制对事物的访问确实可以帮助调试。如果您知道唯一可以添加 gem 的是 GemSpawner,那么您就已经将潜在的基于 gem 的错误隔离到了一个类中。如果它可能来自任何地方,那么调试就会变得更加困难,尤其是当您的项目变得越来越复杂时。

关于Java:为什么不声明静态而不是传递引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com