黑马程序员技术交流社区

标题: 关于IO流 in学习中关于 equals 的问题,求解答 [打印本页]

作者: 石好强    时间: 2012-4-14 14:37
标题: 关于IO流 in学习中关于 equals 的问题,求解答
本帖最后由 石好强 于 2012-4-14 15:36 编辑


  1. import java.io.*;
  2. class ReadIn
  3. {
  4. public static void main(String[] args) throws IOException
  5. {
  6. InputStream in = System.in;
  7. StringBuilder sb = new StringBuilder();
  8. int ch = 0;

  9. while((ch = in.read())!=-1)
  10. {
  11. if(ch=='\r')
  12. continue;
  13. if(ch=='\n')
  14. {
  15. System.out.println(sb.toString().toUpperCase());
  16. sb.delete(0,sb.length());
  17. }
  18. else
  19. sb.append((char)ch);

  20. String s = sb.toString();
  21. if("over".equals(s))       //此处写成 "over"==s   为什么不行,按说都是比较的字符串的内容啊
  22. break;     //我写的这个和老师写的位置不同,按说这个是在判断回车前边运行,也就是只要输入over 不用回车程序就应该结束。
  23.               //但事实是,还是需要回车才能结束程序。有人能帮忙解释下原因么?
  24. }

  25. in.close();

  26. }
  27. }
复制代码
2个疑问,都在代码上注释了,希望能给解释下。

作者: 石好强    时间: 2012-4-14 15:38
没人回答啊,都沉掉了...我自己顶下
作者: 任杰    时间: 2012-4-14 17:13
.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
希望对你有用
作者: 陈扬    时间: 2012-4-14 17:35
你while的循环体出口的条件是if(ch=='\n'),那当然要点击回车键才能结束程序呀。看清楚循环的条件。
作者: 罗旭维    时间: 2012-4-14 17:58
String类不支持==运算符,另外,一般面向对象的程序设计都通过接口实现操作。
代码里判断输入内容是否是“over”,那得先把输入内容读到后才能拿来判断,按回车键后输入才算结束,read才能读到内容并返回。
作者: 石好强    时间: 2012-4-14 18:07
陈扬 发表于 2012-4-14 17:35
你while的循环体出口的条件是if(ch=='\n'),那当然要点击回车键才能结束程序呀。看清楚循环的条件。 ...

break就已经跳出循环了。不过这里需要回车才算一个输入结束。内部原理不是很清楚,哈哈




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