自从我最后一次使用Java以来已经有一段时间了,因为我主要是C#开发人员。为了回到游戏中,我正在研究一个非常简单的应用程序来触及该语言的大多数关键功能。对于每个人都有一个getter
for (Player player : teamRed.getPlayers()) {
System.out.format("> %s\n", player.getName());
}
凡getPlayers()
定义如下:我碰到以下问题跑
public Iterable<Player> getPlayers() {
return Collections.unmodifiableList(this.players);
}
在过去的某个点上,无论是C#或Java有一个性能问题,当您在使用一个getter你对于每个像这样的每个迭代都会执行的方法。我再也找不到任何东西了,所以我想知道:
Java是否曾经受到过这个问题,或者仅仅是C#而已?
就我个人而言,我觉得编译器应该足够聪明来正确优化它,并在迭代之前将getPlayers
的结果实际存储在临时变量中。但如果没有,我没有问题帮助编译手:P
查找增强的for语句[在语言规范(https://docs.oracle.com/javase/specs/jls /se7/html/jls-14.html#jls-14.14.2),请查找“增强的for语句等价于表单的基本语句”。你会发现'getPlayers()'方法只按规范调用一次。 –
我不同意这是重复的。我记得它特别涉及到使用一种方法来检索你想要迭代的列表。链接的问题使用直接访问定义的数组。 –
我不记得Java从来没有遇到过这样的问题(因为在1.2之前),而且我很难相信C#也会遭受这样的基本监督。 – Kayaman