黑马程序员技术交流社区
标题:
不是很明白这里为什么要用强制类型转换~帮忙看一下
[打印本页]
作者:
熊雪莲
时间:
2012-6-15 14:06
标题:
不是很明白这里为什么要用强制类型转换~帮忙看一下
class Test1
{
static int x;
public static void main(String [] args)
{
System.out.println("Please enter :");
try{ x=System.in.read();}
catch(Exception e) {System.out.println(e.getMessage());}
while(x!='w')
{
System.out.println((char)x);//这里为什么x要用强制转化?
try{ x=System.in.read();}
catch(Exception e)//会抛出异常{System.out.println(e.getMessage());}
}
}
}
运行时输入数字会输出相同的数字,输入字符会输出相同的字符,输入w会结束运行,但是我不明白为什么要用强制转换?System.in.read()到底是怎么用的?
作者:
宋建华
时间:
2012-6-15 14:14
System.out.println((char)x);//键盘输入的字符会转换成ASC码的形式存储,如果直接输出,会输出的是字符对应的asc码。所以强制转换为char类型,输出字符
作者:
李盼
时间:
2012-6-15 14:19
本帖最后由 李盼 于 2012-6-15 14:24 编辑
你应该还没有看到IO吧,System.in是一个键盘读取流,这个调用它的read方法读取键盘输入的数据,read方法返回的是一个int型的,是这个字符对于的ASC码表的值,如果你不转换的话,输出的就是它ASC码表的值,而不是这个字符!
例如是输出a, 输出时没转换,就是97。
97就是a字符对应的asc码表的值。
作者:
刘笑
时间:
2012-6-15 14:35
System.in.read()是一个输入字节流,只支持1字节输入,即8位,若超过1字节则在转换为2进制时将被舍去高位,保留最后8位!即只返回一个整型字节数据,该数据表示的是字节因此是Unicode的第一个字节或是字符的ASCII码值。该方法是从一个流中一个一个的读取数据,因此是一个迭代的过程。我们可以看出in是一个静态的流,因此在该程序中只有一个流,重复调用System.in.read()实际上是在遍历该流中的每一个字节数据。最常见的流是键盘输入流。我们可以重复调用System.in.read()来读取从键盘输入的字符串中的字符所代表的字节(ASCII值)。用System.in.read()时,我们在键盘上按下的任何一个键都会被当做是输入值,包括Enter键也会被当做是一个值!
作者:
陌花╮有意、
时间:
2012-6-15 14:36
如果不强制转换将会输出字符的ASC码 而不是字符
作者:
郑冬
时间:
2012-6-15 14:41
System.in返回的是InputStream指向命令行输入的字节流,它的read方法以字节流的方式来读取命令行的输入的数据。也就是说,输入的字符,以字节流的方式从命令行传递给变量x,因此此时x是一个整数(字节流以整数的方式来表示)。System.in.read()返回的是输入数值的 ASCII 码(一个 int 整数),所以要进行强制转换。System.in.read()可以实现输入字符,返回字符的Unicode码,但是缺点是只能输入一个字符
作者:
熊雪莲
时间:
2012-6-17 00:39
李盼 发表于 2012-6-15 14:19
你应该还没有看到IO吧,System.in是一个键盘读取流,这个调用它的read方法读取键盘输入的数据,read方法返 ...
嗯,确实还没看到IO
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2