日期:2014-05-20  浏览次数:20573 次

if、while、for等 有加{}与没{}问题
http://topic.csdn.net/u/20110529/07/a617db5b-7c59-4b87-bfe6-a92388cc9b48.html?7510
这是在看了这个帖子里面火龙果前辈[img=http://hi.csdn.net/space-8652126-do-album-picid-823269-goto-down.html][/img],引发的猜想
自己动手做几个试验,果真出问题了:
[img=http://hi.csdn.net/space-8652126-do-album-picid-823270-goto-down.html][/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);
        }