黑马程序员技术交流社区
标题:
关于System.in.read()的问题
[打印本页]
作者:
张旭明
时间:
2012-6-14 17:56
标题:
关于System.in.read()的问题
int a=0;
a=System.in.read();为什么System.in.read()的值为什么是int类型的,可是要输入的却是char类型的,另外a怎么又能跟char类型的比如'\n'或者'\r'进行比较?
作者:
李盼
时间:
2012-6-14 18:02
int 和 char都是基本数据类型,他们在计算时,会自动按照容积最大的数据类型进行转换!也就是说char会自动转成int型!
作者:
梁清平
时间:
2012-6-14 18:10
首先,System.in 返回的是标准的输入流InputStream。
然后,InputStream的read()方法的返回值是一个int型的值,实际上这个过程中涉及到一个byte型数值在输出流中有一个提升过程,这是为了使字节读取流在读取过程中避免读到-1直接返回的现象。详细讲解请看毕向东_Java基础视频教程第19天-14-IO流(自定义字节流的缓冲区)。
最后,a是一个int型的变量,当然可以和char类型做比较了,因为每字符都有相对应的ASC码值。
作者:
钟成军
时间:
2012-6-14 18:12
第一个问题:System.in返回的数据类型是
InputStream类
,此类再去调用它的
抽象方法read();返回值类型为int 型
,所有System.in.read()的最后返回类型是int.
第二个问题:a得到一个值,且是int 类型,当'\n','\r'与a比较时,'\n'或'\r'会
转化成相应的ASCII码值
与a进行比较
作者:
吴小东
时间:
2012-6-14 18:23
首先 System.in 是一个标准输出流,InputStream 是一个字节输出流,InputStream.read()方法每次读一个字节,所以返回的都是该字节相对应的ascii 码
第二个问题你看下下面的代码,所以char 是能和int值进行比较的
char a = '\r';
char b = '\n';
System.out.println(a+0);// 对应ascii码表的值为 13
System.out.println(b+0);// 对应ascii码表的值为 10
复制代码
作者:
--☆伟☆--
时间:
2012-6-14 18:27
这个是类型提升
至于原因是涉及到判断条件-1的,在读取字节数据时候,如果连续出现8个二进制的1111 1111那么在十进制中就是-1
为了避免这种情况,类型就提升所以就用int接收,32个1表示了int类型的-1,我们只要保留后面8位所以上,255就变成了1111 1111 存这样就不会丢失数据。
不知道你是不是问这个问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2