用于(x:y)执行的Java
我有以下for循环:用于(x:y)执行的Java,java,string,loops,for-loop,Java,String,Loops,For Loop,我有以下for循环: for(String s : someString.split("\\s+")){ //do something } java是每次循环迭代时都执行split()方法,还是只执行一次并保留一个临时数组进行迭代?在使用该数组之前,它将该数组存储在一个临时变量中。它只执行一次,并使用该数组进行交互 编辑:从Mat这是否,对字符串执行一次分割,然后循环迭代结果分割方法只调用一次。将结构(也称为a for each)考虑如下: 第二个参数在循环期间被计算和保留 如果参数提
for(String s : someString.split("\\s+")){
//do something
}
java是每次循环迭代时都执行split()方法,还是只执行一次并保留一个临时数组进行迭代?在使用该数组之前,它将该数组存储在一个临时变量中。它只执行一次,并使用该数组进行交互
编辑:从Mat这是否,对字符串执行一次分割,然后循环迭代结果分割方法只调用一次。将结构(也称为a for each)考虑如下:
- 第二个参数在循环期间被计算和保留
- 如果参数提供了一个Iterable或是一个数组(特殊情况),则会检查第一个参数的类型是否与返回的元素对应
- 进程进入循环并在作用域内执行代码,当没有更多元素时退出
注:这适用于Java 5 minimum。文档中详细说明了具体发生的情况。如果“数组是iterable”的意思是数组实现了
iterable
接口,那可能是错误的。很难说像Eclipse这样的IDE在强调问题时会进行某种形式的编译。@trutheality:我的意思是,数组在拆箱后会表现为一个Iterable。我承认这是一个假设,我很想知道Java是否真的以不同的方式处理这个问题。“表达式必须具有Iterable类型,否则它必须是数组类型,否则会发生编译时错误。”-来自发布的JLS引用Mat@JamesP.是我理解它的工作原理:如果第二个参数是数组,则循环被解释为(I=0;I)的