gpt4 book ai didi

java - 在 JAVA 中,for-each 循环在内部是如何工作的?

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

当我进行函数调用时,我试图找到 for-each 循环的工作原理。请看下面的代码,

public static int [] returnArr()
{
int [] a=new int [] {1,2,3,4,5};
return a;
}

public static void main(String[] args)
{
//Version 1
for(int a : returnArr())
{
System.out.println(a);
}

//Version 2
int [] myArr=returnArr();
for(int a : myArr)
{
System.out.println(a);
}
}

在版本 1 中,我在 for-each 循环中调用 returnArr() 方法,在版本 2 中,我显式调用 returnArr() 方法并将其分配给一个数组,然后遍历它。两种情况的结果相同。我想知道哪个更有效以及为什么。

我认为版本 2 会更高效,因为我不会在每次迭代中都调用方法。但令我惊讶的是,当我使用版本 1 调试代码时,我看到方法调用只发生了一次!

谁能解释一下它实际上是如何工作的当我为复杂对象编码时,哪个更有效/更好

最佳答案

Java Language Specification显示底层编译

Let L1 ... Lm be the (possibly empty) sequence of labels immediatelypreceding the enhanced for statement.

The enhanced for statement is equivalent to a basic for statement ofthe form:

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}

其中 Expression 的右侧: 在增强的 for 语句(您的 returnArr())中。在这两种情况下,它只被评估一次:在版本 1 中,作为增强的 for 语句的一部分;在版本 2 中,因为它的结果被分配给一个变量,然后在增强的 for 语句中使用该变量。

关于java - 在 JAVA 中,for-each 循环在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404490/

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