for (variable : collection) statement
结果无意中发现它的两个参数(第一个是数组中元素的类型,第二个是数组对象)中的第一个参数必须在括号中声明,
如果在外部声明,而括号中直接使用的话就会在第一个参数上报错:variable cannot be resolved to a type
并且在第二个参数上报错:Type mismatch: cannot convert from element type int to variable
这让我比较费解,for语句中的初始化、检查、更新参数都可以在语句外部声明,为什么这个很类似for语句的“foreach”语句不能这么定义,应该怎么理解这个语句呢?
11 个解决方案
#1
懂得啦你说的意思 但是我回答不上来 给你顶顶
#2
你的意思大概是
可以运行,但是
不能运行吧。
---------
我感觉foreach语句只是java这样规定的而已,因为java中本来就提倡for(int i=0;;)这种写法,而不提倡
int i; for(i=0;;)这种写法,所以java中新定义了一种语法很可能就只让按照第一种写
int[] a={3,4,5};
for(int i:a){
System.out.println(i);
}
可以运行,但是
int[] a={3,4,5};
int i;
for(i:a){
System.out.println(i);
}
不能运行吧。
---------
我感觉foreach语句只是java这样规定的而已,因为java中本来就提倡for(int i=0;;)这种写法,而不提倡
int i; for(i=0;;)这种写法,所以java中新定义了一种语法很可能就只让按照第一种写
#3
您说的很有道理,可能是我想多了,其实就是像您说的这样的简单。
以您的思路继续往下想,我又想到:
for语句中之所以可以在语句之外声明变量,是因为可能在语句之外需要用到这个参数,比如运行到某一次循环时会跳出。
但在“foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题,所以没有必要设计成可以在外部声明参数的设定。
这样就可以解释了,不知道我这样理解是否正确,还请高手指点。
#4
我觉得你说的很对, “foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题我觉得你说的这个才是核心,我没有考虑到这个,受教了
#5
没有规定foreach一定要遍历所有的元素,中途一样可以break
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
#6
多谢捧场,我也顶一个,明天见。
#7
确实,中间可以随时中断,书中说的是可以遍历所有的元素,并不是必须。
我过于执着的想要找个理由用于理清他和for语句的关系,以及更好的解释for语句,想多了。
#8
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块,而for循环是先判断条件是否成立,然后在执行下面的语句块
#9
1、您这里所说的“嵌入语句组”实现的功能是什么?
2、您说“foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块”,我不太明白您说的是每个元素的每次循环是这样的操作流程,还是一开始就对所有元素执行嵌入语句组,之后才进行后面的语句?
#10
#11
顶了再顶
#1
懂得啦你说的意思 但是我回答不上来 给你顶顶
#2
你的意思大概是
可以运行,但是
不能运行吧。
---------
我感觉foreach语句只是java这样规定的而已,因为java中本来就提倡for(int i=0;;)这种写法,而不提倡
int i; for(i=0;;)这种写法,所以java中新定义了一种语法很可能就只让按照第一种写
int[] a={3,4,5};
for(int i:a){
System.out.println(i);
}
可以运行,但是
int[] a={3,4,5};
int i;
for(i:a){
System.out.println(i);
}
不能运行吧。
---------
我感觉foreach语句只是java这样规定的而已,因为java中本来就提倡for(int i=0;;)这种写法,而不提倡
int i; for(i=0;;)这种写法,所以java中新定义了一种语法很可能就只让按照第一种写
#3
您说的很有道理,可能是我想多了,其实就是像您说的这样的简单。
以您的思路继续往下想,我又想到:
for语句中之所以可以在语句之外声明变量,是因为可能在语句之外需要用到这个参数,比如运行到某一次循环时会跳出。
但在“foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题,所以没有必要设计成可以在外部声明参数的设定。
这样就可以解释了,不知道我这样理解是否正确,还请高手指点。
#4
我觉得你说的很对, “foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题我觉得你说的这个才是核心,我没有考虑到这个,受教了
#5
没有规定foreach一定要遍历所有的元素,中途一样可以break
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
#6
多谢捧场,我也顶一个,明天见。
#7
确实,中间可以随时中断,书中说的是可以遍历所有的元素,并不是必须。
我过于执着的想要找个理由用于理清他和for语句的关系,以及更好的解释for语句,想多了。
#8
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块,而for循环是先判断条件是否成立,然后在执行下面的语句块
#9
1、您这里所说的“嵌入语句组”实现的功能是什么?
2、您说“foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块”,我不太明白您说的是每个元素的每次循环是这样的操作流程,还是一开始就对所有元素执行嵌入语句组,之后才进行后面的语句?
#10
#11
顶了再顶