Java的foreach循环是从第一个对象开始,以线性方式工作到最后吗?例如
String[] names = new String[] {"Zoe", "Bob", "Charlie", "Alex"};
for(String name : names) {
//do stuff...
}
Run Code Online (Sandbox Code Playgroud)
首先处理字符串"Zoe",然后是"Bob"等吗?没有排序?我自己测试了一下,但没有找到,但我需要保证,在文档中找不到任何东西.
Sim*_*ant 43
是.订单不会改变.这适用于实现for循环使用的迭代器接口的Java Collection Framework的所有类型的集合.如果要对Array进行排序,可以使用Arrays.sort(名称)
Tun*_*aki 37
增强型for循环在JLS 14.14.2中指定,其中写入了等效代码.
它可以用于循环数组和实例Iterable.
对于数组,迭代的顺序将始终保持并在运行之间保持一致.这是因为它等同于一个简单的for循环,索引从数组的开头到结尾.
增强的for语句相当于表单的基本for语句:
Run Code Online (Sandbox Code Playgroud)T[] #a = Expression; L1: L2: ... Lm: for (int #i = 0; #i < #a.length; #i++) { {VariableModifier} TargetType Identifier = #a[#i]; Statement }
#a并且#i是自动生成的标识符,这些标识符与发生增强的for语句的范围内的任何其他标识符(自动生成的或其他标识符)不同.
对于a Iterable,它将遵循相应的顺序Iterator(通过调用检索Iterable.iterator()),在运行之间可能是也可能不一致.
增强的for语句相当于表单的基本for语句:
Run Code Online (Sandbox Code Playgroud)for (I #i = Expression.iterator(); #i.hasNext(); ) { {VariableModifier} TargetType Identifier = (TargetType) #i.next(); Statement }
#i是一个自动生成的标识符,它与发生增强for语句时的范围(第6.3节)中的任何其他标识符(自动生成的或其他标识符)不同.
您应该参考每种类型的Javadoc以查看订单是否一致.例如,明确指出for List,迭代器保留顺序:
以适当的顺序返回此列表中元素的迭代器.
元素以无特定顺序返回(除非此集合是某个提供保证的类的实例).