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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张旭明

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 张旭明 注册黑马   /  2012-6-14 17:56  /  1421 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=0;
a=System.in.read();为什么System.in.read()的值为什么是int类型的,可是要输入的却是char类型的,另外a怎么又能跟char类型的比如'\n'或者'\r'进行比较?

5 个回复

倒序浏览
int 和 char都是基本数据类型,他们在计算时,会自动按照容积最大的数据类型进行转换!也就是说char会自动转成int型!
回复 使用道具 举报
首先,System.in  返回的是标准的输入流InputStream。
然后,InputStream的read()方法的返回值是一个int型的值,实际上这个过程中涉及到一个byte型数值在输出流中有一个提升过程,这是为了使字节读取流在读取过程中避免读到-1直接返回的现象。详细讲解请看毕向东_Java基础视频教程第19天-14-IO流(自定义字节流的缓冲区)。
最后,a是一个int型的变量,当然可以和char类型做比较了,因为每字符都有相对应的ASC码值。
回复 使用道具 举报
第一个问题:System.in返回的数据类型是InputStream类,此类再去调用它的抽象方法read();返回值类型为int 型,所有System.in.read()的最后返回类型是int.
第二个问题:a得到一个值,且是int 类型,当'\n','\r'与a比较时,'\n'或'\r'会转化成相应的ASCII码值与a进行比较
回复 使用道具 举报
首先 System.in 是一个标准输出流,InputStream 是一个字节输出流,InputStream.read()方法每次读一个字节,所以返回的都是该字节相对应的ascii 码
第二个问题你看下下面的代码,所以char 是能和int值进行比较的
  1.                 char a = '\r';
  2.                 char b = '\n';
  3.                 System.out.println(a+0);// 对应ascii码表的值为 13
  4.                 System.out.println(b+0);// 对应ascii码表的值为 10
复制代码
回复 使用道具 举报
这个是类型提升
至于原因是涉及到判断条件-1的,在读取字节数据时候,如果连续出现8个二进制的1111 1111那么在十进制中就是-1
为了避免这种情况,类型就提升所以就用int接收,32个1表示了int类型的-1,我们只要保留后面8位所以上,255就变成了1111 1111 存这样就不会丢失数据。
不知道你是不是问这个问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马