为什么foreach不能与String一起使用?

时间:2018-11-05 03:08:46

标签: java

我正在尝试

String s = "test string";
for(Character c: s) {

}

编译器报告错误。我想知道为什么我不能在字符串中使用foreach吗?

1 个答案:

答案 0 :(得分:3)

原因在JLS 14.14.2中列出:

EnhancedForStatement:
    for ( {VariableModifier} LocalVariableType VariableDeclaratorId : Expression ) Statement 
     

...

     

Expression的类型必须是原始类型Iterable的子类型或数组类型(第10.1节),否则会发生编译时错误。

String不是Iterable的子类型或数组类型。因此....编译错误。


如@shmosel所述,您可以迭代char[]返回的s.toCharArray[]。但是,这将创建一个新的数组 1

1-...除非您的JVM JIT编译器足够聪明以至于对其进行优化。我认为他们目前无法做到这一点,并且我不会押注希望实现该优化的Java设计人员。