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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极£莜蓝 中级黑马   /  2014-6-25 23:32  /  1035 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
}
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

2 个回复

倒序浏览
== 比较的是地址. equals被重写后,比较的是内容.readline()读取键盘输入的"886",往哪里存?和常量池中的"886" 地址不一致
回复 使用道具 举报
你这个问题主要是就是涉及到equals和==的区别。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
比如:
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
用equals比较则返回true
你的“886“.equals(line)永远是flase,所以不会结束。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

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