本帖最后由 clevergump 于 2014-10-8 00:57 编辑
我的疑问是:
循环语句的循环条件内,同一个语句中,为何不能同时进行局部变量的定义+赋值(其中,定义+初始化,使用括号运算符修饰使其优先于后面的条件判断的执行)+涉及到该局部变量的循环条件判断?
以毕老师 IO流 FileReader 的视频为例来描述我的疑问。为突出重点,在此省略了 try、catch、finally等语句,如下代码是毕老师的代码。
- FileReader fr = new FileReader("F:\\JavaProject\\data\\fileReaderDemo.txt");
- int ch = 0;
- while ((ch = fr.read()) != -1)
- {
- System.out.println((char) ch);
- }
复制代码 其中的ch和while循环,如果改为如下写法会报错:
- while ((int ch = fr.read()) != -1)
- {
- System.out.println((char) ch);
- }
复制代码
同样地,在for循环中,也是这种情况,也是局部变量的定义、初始化以及循环条件判断不能同时写在一个语句中。比如,下面的写法是可以的:
- for (int ch = 0; (ch = fr.read()) != -1;)
- {
- System.out.println((char) ch);
- }
复制代码 但下面的写法就是错的:
- for ( ; ( int ch = fr.read()) != -1; )
- {
- System.out.println((char) ch);
- }
复制代码
上面两个例子告诉了我,怎样使用就是对的,怎样使用就是错的,但我不知道错误用法的具体原因。我的疑惑是,既然已经使用括号运算符让赋值语句优先执行,执行完赋值后再去执行后面的判断语句,为何还是会报错呢?期待大神帮忙解答!谢谢! |