FileReader fr = new FileReader("c:/mydoc/hello.txt");
BufferedReader br = new BufferedReader(fr);//下面这句错了吗?

while (String str2 = br.readLine()!= null) {
System.out.println(str2);
str2 = br.readLine();
}
fr.close();
br.close();

解决方案 »

  1.   

    while判断里面的代码是从右向左执行的,你这样等于是while (String str2 = (br.readLine()!= null)) {这样的话while判断里面是一个String,所以不行啊
      

  2.   


    但是
    while ((String str2=br.readLine())!= null) {
                System.out.println(str2);
                str2 = br.readLine();
            }
            fr.close();
            br.close();
    还是错的
       String str2;
       while ((str2=br.readLine())!= null) {
                System.out.println(str2);
                str2 = br.readLine();
            }
            fr.close();
            br.close();这样却没有问题,为什么?
      

  3.   


    但是
    while ((String str2=br.readLine())!= null) {
      System.out.println(str2);
      str2 = br.readLine();
      }
      fr.close();
      br.close();
    还是错的
      String str2;
      while ((str2=br.readLine())!= null) {
      System.out.println(str2);
      str2 = br.readLine();
      }
      fr.close();
      br.close();这样却没有问题,为什么?
      

  4.   

    从右向左执行的时候,先执行的判断再赋值,而while里面最后是这样的while(str2=true)或while(str2=false)这就不是一个判断语句了,所以会报错,需要读出来的数据先赋值给str2,然后再进行比较
      

  5.   

    因为String str2=br.readLine()是变量定义;而声明了str2后,str2=br.readLine()只是一个初始化表达式,跟普通的赋值表达式一个样。
    普通的赋值表达式返回一个跟等号右边的值完全相同的值,所以可以跟null进行比较;
    而变量定义有返回值么都难说……
      

  6.   

    一个就是错的东西,你偏偏较劲,让错的说成是对的,有点无聊啊。
    String str = 1234;是错的,int str = 1234;是对的,有那么多为什么吗?