A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李楠 黑马帝   /  2011-12-23 10:53  /  7587 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李楠 于 2011-12-23 13:12 编辑

定义了一个FileReader类的实例 fr。
如果fr.read()读到了文件最后,会返回一个-1,就表示读到了文件最后了。
但是这个代码里while((ch = fr.read()) != -1)
用while循环里那段代码表示读到文件末尾,这个代码为什么不是表示:如果fr.read()能赋值给ch为真,不能为假呢。
我这里想不明白。

我不明白的是(ch = fr.read())这个表达式可以和-1 比较。

把我最后发的提到前面来。

int func(){
        return -1;
}

void main() {

        int ch ;
        while((ch = func()) != -1) {
                printf("aaa");
        }
        getch();
      
}
看我写的这个代码,在c或者c++的编译器里,这个while循环是不执行的。
因为和-1作比较的是表达式,不是ch那个变量。
想要这个while执行,改成while((ch = func()) != 1),因为(ch = func())赋值成功,返回了true,然后这个true和-1比较。
可以在java里就不是这样了,为什么ch会去和-1做比较呢?

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

12 个回复

倒序浏览
到达流结尾返回-1 ,这个我知道,那判断的时候,应该是 fr.read() != -1.
可是其实是 先把fr.read()赋值给ch,然后这个赋值表达式去和-1比。
就是(ch = fr.read()) != -1;
这个就不能理解了。
回复 使用道具 举报
袁泽宇 发表于 2011-12-23 11:06
while((ch = fr.read()) != -1)  
这个代码为什么不是表示:如果fr.read()能赋值给ch为真,不能为假呢。

和 -1 比得实际上是一个表达式呢,如果是在c语言里,这个表达式会返回0或者1。
现在在java里,如果是ch和-1做比较,应该是 ch = -1.
然后就不明白了。
回复 使用道具 举报
int func(){
        return -1;
}

void main() {

        int ch ;
        while((ch = func()) != -1) {
                printf("aaa");
        }
        getch();
       
}
看我写的这个代码,在c或者c++的编译器里,这个while循环是不执行的。
因为和-1作比较的是表达式,不是ch那个变量。
想要这个while执行,改成while((ch = func()) != 1),因为(ch = func())赋值成功,返回了true,然后这个true和-1比较。
可以在java里就不是这样了,为什么ch会去和-1做比较呢?

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马