为什么这样:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print((char)b);
}
}
按预期工作,即准确打印您输入的内容,并且:
import java.io.*;
class ioTest2 {
public static void main(String args[])throws IOException{
int b;
while( (b = System.in.read() ) != -1)
System.out.print(b);
}
}
没有?为什么我将b
转换为字符以使代码正确?
答案 0 :(得分:1)
read()
method返回int
,它存储从流中读取的下一个字节。您需要将其转换为char
,否则将打印int
值。
如果您键入" ABCD",然后不进行强制转换,则调用println(int)
method(System.out
为PrintStream
),并且字节值为打印。
B D
vv vv
65666768
^^ ^^
A C
如果你把它转换为char
,那么调用一个不同的重载方法println(char)
,它知道要打印指定的字符,所以"工作" (回复你输入的字符)。
答案 1 :(得分:0)
read()
方法returns an integer,如果已到达流的末尾,则返回-1。
char
或字符是primitive type,可以表示为数字。由于您将整数转换为字符,因此它会在屏幕上显示。
答案 2 :(得分:0)
System.out.print((char)b)
从System.out.print(b)
调用不同的方法。他们做了不同的事情。
调用哪种方法不仅取决于名称,还取决于名称和类型签名(即参数的类型)。不同的方法可以具有相同的名称,只要它们具有不同的参数列表。
阅读JavaDoc:
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28int%29
对战
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print%28char%29