0

我注意到以下代码行存在很多。(例如在这个网站上。)

char ch = (char) System.in.read();  // uses a char, and requires a cast.

现在来测试特定的字符击键、ASCII 值或转义序列等。

if (ch == 'a' || ch == 65 || ch == '\n' || ch == 13) System.out.print("true");

使用上面的 char 是否比下面使用 int 的以下代码行提供任何好处?

int i = System.in.read();  // uses an int, which requires no cast.

int 变量“i”可以用在与前面所示相同的 if 语句中。

4

2 回答 2

2

演员阵容完全没有理由。这可以

int i = System.in.read();
if(i == 'a'){
   // do something
}

您可以这样做,因为'a'它是 int 范围内的值。

另外,请注意,在读取文件等时直接对 char 进行强制转换可能会InputStream.read()出现问题,因为读取的是 abyte而不是 a char。Achar是两个字节宽。

于 2013-11-27T16:53:19.410 回答
2

这两种方法都不正确。读取字符的正确方法System.in是使用一个InputStreamReader(或者Scanner如果它提供了正确的功能)。原因是InputStream.read()读取单个字节,而不是字符,有些字符需要读取多个字节。您还可以指定将字节转换为字符时要使用的字符编码。

Reader rdr = new InputStreamReader(System.in);
int i = rdr.next();
if (i == -1) {
    // end of input
} else {
    // normal processing; safe to cast i to char if convenient
}
于 2013-11-27T16:58:52.927 回答