黑马程序员技术交流社区

标题: BufferedReader 中的readline() [打印本页]

作者: 北极£莜蓝    时间: 2014-6-25 23:32
标题: BufferedReader 中的readline()
public class InputStreamReaderDemo {
   public static void main(String[] args) throws IOException {
//    数据源 :     字节流转换成字符流  获取键盘输入
    BufferedReader  br = new BufferedReader(new InputStreamReader(System.in));
    //目的地
         BufferedWriter bw = new  BufferedWriter(new FileWriter("demo.txt"));
         
         //数据读取
        String line  = null;
        while((line = br.readLine()) != null) {
         
      /*   if("886"==(line)) {  //     假设键盘输入886  用== 就不能结束程序.用equals就可以
          break;
         }*/
         if("886".equals(line)) {
          break;
         } else{
         bw.write(line);
         bw.newLine();         
         bw.flush();
         }
        }
         
        
        // 释放资源
              br.close();
              bw.close();
}
}
作者: 北极£莜蓝    时间: 2014-6-25 23:39
== 比较的是地址. equals被重写后,比较的是内容.readline()读取键盘输入的"886",往哪里存?和常量池中的"886" 地址不一致

作者: 陈培果    时间: 2014-6-25 23:55
你这个问题主要是就是涉及到equals和==的区别。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
比如:
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
用equals比较则返回true
你的“886“.equals(line)永远是flase,所以不会结束。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2