Java 程序员为什么在System.in.read()中使用字符呢?
我注意到下面这行代码存在很多。(例如,在本网站上。) 现在来测试特定字符的击键、ASCII值或转义序列等Java 程序员为什么在System.in.read()中使用字符呢?,java,escaping,system.in,Java,Escaping,System.in,我注意到下面这行代码存在很多。(例如,在本网站上。) 现在来测试特定字符的击键、ASCII值或转义序列等 if (ch == 'a' || ch == 65 || ch == '\n' || ch == 13) System.out.print("true"); 使用上面的字符比下面使用int的代码行有什么好处吗 int i = System.in.read(); // uses an int, which requires no cast. int变量“i”可以在前面所示的相同if语句中
if (ch == 'a' || ch == 65 || ch == '\n' || ch == 13) System.out.print("true");
使用上面的字符比下面使用int的代码行有什么好处吗
int i = System.in.read(); // uses an int, which requires no cast.
int变量“i”可以在前面所示的相同if语句中使用。完全没有理由强制转换。这很好
int i = System.in.read();
if(i == 'a'){
// do something
}
您可以这样做,因为'a'
是一个int范围内的值
另外,请注意,在读取文件等时,直接对字符进行强制转换可能会有问题,因为
InputStream.read()
所做的是读取字节,而不是char
。字符有两个字节宽。完全没有理由强制转换。这很好
int i = System.in.read();
if(i == 'a'){
// do something
}
您可以这样做,因为'a'
是一个int范围内的值
另外,请注意,在读取文件等时,直接对字符进行强制转换可能会有问题,因为InputStream.read()
所做的是读取字节,而不是char
。字符有两个字节宽。两种方法都不正确。从
系统中读取字符的正确方法是使用(或,如果提供了正确的功能)。原因是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
}
这两种方法都不正确。从
系统中读取字符的正确方法是使用(或,如果提供了正确的功能)。原因是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
}
老实说,答案可能和可读性一样简单。其目的是将其用作字符,因此程序员将其转换为字符。老实说,答案可能与可读性一样简单。其目的是将其用作字符,因此程序员将其转换为字符代码>请解释为什么变量“rdr”是Reader类型,而不是InputStreamReader类型?具体来说,请您解释一下这项服务的好处。谢谢。另外,在您的代码示例中,当您使用next()方法时,您是指read()?@user2911290-在这种情况下没有特别的好处。这只是习惯;我通常编程到一个接口,除非我需要一个更具体类型的特定功能。它使代码的未来演化更容易。(例如,我可以切换到
CharArrayReader
或PipedReader
,而不用担心是否依赖于特定于方法或行为的InputStreamReader
)关于示例代码中的第一行:Reader rdr=new InputStreamReader(System.in)代码>请解释为什么变量“rdr”是Reader类型,而不是InputStreamReader类型?具体来说,请您解释一下这项服务的好处。谢谢。另外,在您的代码示例中,当您使用next()方法时,您是指read()?@user2911290-在这种情况下没有特别的好处。这只是习惯;我通常编程到一个接口,除非我需要一个更具体类型的特定功能。它使代码的未来演化更容易。(例如,我可以切换到CharArrayReader
或PipedReader
,而不用担心是否依赖于特定于方法或行为的InputStreamReader
)