http://topic.csdn.net/u/20110529/07/a617db5b-7c59-4b87-bfe6-a92388cc9b48?7510
这是在看了这个帖子里面火龙果前辈[img=http://hi.csdn.net/space-8652126-do-album-picid-823269-goto-down][/img],引发的猜想
自己动手做几个试验,果真出问题了:
[img=http://hi.csdn.net/space-8652126-do-album-picid-823270-goto-down][/img]
猜想:
for循环在没有加{}是不能识别变量的
只有加{}才能识别变量!
求解!!!
------最佳解决方案--------------------------------------------------------
如果了解变量的作用域和生命周期这个就容易理解了
首先如果在{}定义变量,那么变量的生命周期就会在{}中,当{}结束,变量的生命就结束
那么
for(int i = 0; i <= 10; i++) // 报错举个简单的例子
Integer k = new Integer(i); //这样会导致k被重复定义,
//因为这样k的生命周期没有for的{}限制,
//被当作是整个程序的作用域处理
for(int i = 0; i <= 10; i++) { // 正常
Integer k = new Integer(i); //因为k离开了for的{}生命就结束,
//所以再次进入for的{}可以重新定义,因为是新的一个k
}
class Test {
public void main(String[] args) {
int i = 0;
int i = 1; //会导致重复定义,编译失败
//而这样的定义就不会
{int i = 0;}
{int i = 1;}
}
}
------其他解决方案--------------------------------------------------------
坐等高人释疑!
------其他解决方案--------------------------------------------------------
没有大括号表示肯定只有一条语句,Java语言规范不允许一个变量声明语句作为一条语句在for、while或do循环中重复执行
这个在《java解惑》一书中也有提到
------其他解决方案--------------------------------------------------------
沙发一下,图片没插好,就用源码吧:
package CSDN;
public class TestCodeFormat {
public static void main(String[] args) {
for(int i = 0; i <= 10; i++) // 报错
Integer k = new Integer(i);
for(int i = 0; i <= 10; i++) { // 正常
Integer k = new Integer(i);
}