------解决方案-------------------- 变量s,在使用for (i = 0; i < s.length; i++) System.out.println(s[i]); 这里的时候,编译通不过,是因为编译器根本不认识s这个变量,也就是说在用到S之前,你没有创建它,你创建的那个s的作用域只有if (x == 0) { String s[] = new String[4]; for (i = 0, n = 1; i < 4; i++) { s[i] = String.valueOf(n); n++; } }这个大括号里面能用,所以到for循环哪里,s的生命周期已经结束了,而你的第二份中,s的生命周期 String s[] = new String[4]; for (i = 0, n = 5; i < 4; i++) { s[i] = String.valueOf(n); n++; } for (i = 0; i < s.length; i++) System.out.println(s[i]); 是这些,在你for循环体重用到的时候,s已经定义过了,且在它的生命周期内,所以在编译期不会报错