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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许冉 黑马帝   /  2011-10-13 14:25  /  2685 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xuan 于 2011-10-13 15:18 编辑

看视频的时候发现,貌似一些代码写法有讲究
比如读取控制台输入的一行文本,如果是over,则结束程序
假设我们每读取一行文本后赋给字符串line
判断line是否为over
我们一般的思维是:if(line.equals("over"))
但经常看到老师这样写: if("over".equals(line))

还有就是当读取字节流时,假设每读取一个字节后赋给变量ch
判断是否文件结束时
我们一般的思维是:if(ch!=-1)
不过经常看到有这样写: if(-1!=ch)
以上两种写法好像和我们的正常思维相反,是不是有什么讲究啊

8 个回复

倒序浏览
同学是IO流的问题,并不是什么写法的讲究。
                  看了您的代码,发现您没有仔细的描述,上边那些代码的的运行环境,所以我猜了了一下,
                  目的,及适用于的地方:适用于在控制台读取一段文本,来打印出来,会输入一个文本中!

                   重要的来了哦!!!
                   为什么上面会出现over.equals(line) ;它的是意思当我们读取一行文本的时候读到的over的时候就跳出该循环,退出,不在向输出流来输出数据。
                  
                   -1.是一个文本的结束标志,这个不能随便写,当一个流独到一个文本的末尾的时候,就会读取到-1所以,才会判断-1

                      总结:你也把流给搞混了....line 看其样子,就是用bufferedReader(Io缓冲区)的readline方法读取的,而下边一个用时是read方法读取的,readeline看其名称,顾名思义,就是读取一行。read则是读取一个字符。
读取一行,明显是一个字符串,所以可以和over比,下边读取一个字符,所以可以和-1比。
                       建议:多查查API,看看IO的buffered(缓冲区)的原理.
回复 使用道具 举报
许冉 黑马帝 2011-10-13 15:17:35
藤椅
苏志伟 发表于 2011-10-13 14:53
同学是IO流的问题,并不是什么写法的讲究。
                  看了您的代码,发现您没有仔细的描述,上边 ...

是我没表达清楚,又编辑了一下
我是想问
按我的思维为写成 if (line.equals("over"))
而老师经常写成    if("over".equals(line))
回复 使用道具 举报
哎!!~
         重要的来了哦!!!问题核心:
         line是个String类型的变量,over也是String类型的。两个都是一个类String的实例化对象了,那他们的equals方法都是一样的!顾名思义,那么您觉得其谁equals谁有区别么?
         不过按照逻辑思想,我赞同你的写法,老师是写习惯了。。。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
写在前面:
String str = new String("hello");
我们写到类似:if(str==“world”)语句的时候,一般就是这样写:if(“world”==str)
这个是为了防止,当我们少写一个=号的时候,马上就报错,但是str=“world”是赋值语句不会报错(肯定违背了我们的意愿,肯定不好啊),但是“world”=str马上就会报错(所以这样写是一个好习惯)。
if(-1!=ch)
if("over".equals(line))
和那个类似吧,就是为了让常量写在前面。为了养成好的习惯吧。
回复 使用道具 举报
许冉 黑马帝 2011-10-13 16:41:50
地板
伍碧林 发表于 2011-10-13 16:06
写在前面:
String str = new String("hello");
我们写到类似:if(str==“world”)语句的时候,一般就是 ...

你说的情况以前还真没注意过
不过test了一下
写成if(str="world") 会报错的
回复 使用道具 举报
许冉 黑马帝 2011-10-13 16:42:18
7#
苏志伟 发表于 2011-10-13 15:53
哎!!~
         重要的来了哦!!!问题核心:
         line是个String类型的变量,over也是String类型 ...

难不成把常量写在前面真的就是一种习惯吗
总觉的这其中有什么讲究,哎~~
回复 使用道具 举报
伍碧林 黑马帝 2011-10-13 20:53:09
8#
本帖最后由 伍碧林 于 2011-10-13 21:03 编辑
xuan 发表于 2011-10-13 16:41
你说的情况以前还真没注意过
不过test了一下
写成if(str="world") 会报错的


好吧,确实我说的有些地方不够好,我上机试了试

public class test1 {
public static void main(String[] args) {
        //至于把if(len==0)写成if(len=0),这个会通不过编译的。
        //编辑器会指出这个错误的,不用担心会出错。
        //但是对String有区别
    String myValue=null;
        System.out.println("string ".equals(myValue));//编译过,运行也没有问题
        System.out.println(myValue.equals("string"));// 编译过,运行是报NullPointerException
        //避免myValue为null
        //所以这个是一个好习惯,所以....               
}
}

评分

参与人数 2技术分 +2 黑马币 +2 收起 理由
admin + 2
许冉 + 2 赞一个!

查看全部评分

回复 使用道具 举报
许冉 黑马帝 2011-10-13 21:27:23
9#
伍碧林 发表于 2011-10-13 20:53
好吧,确实我说的有些地方不够好,我上机试了试

public class test1 {

以后还真得注意

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

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