bufferedinputstream help

我在某处看到了以下代码,我对('0')部分感到困惑。这是做什么的? bis是缓冲的输入流,输入是一个多个整数的行,每个整数用空格分隔(即1 2 3 4 5 6)。
static int num()throws IOException{
  rz=0;
  while((ry=bis.read())<'0' || ry>'9'){}
  rz+=('0');
  while((ry=bis.read())>='0' && ry<='9')
   rz=rz*10+('0');
  return rz;
 }
    
已邀请:
'0'
将存储在
ry
中的ASCII字符'0' - '9'转换为相应的十进制值(0-9)。 '0'转换为0,'1'转换为1,依此类推。     
aix的回答是正确的,但是让我加一个小解释: 重要的是要查看表达式
'0'
的不同实体的类型以便理解它。好吧,也许甚至在此之前我们必须意识到我们正在看一个减法,即表达式或类型x减y,其中x是
ry
,y是
'0'
ry
int
0
char
。在Java中,可以将
char
向上转换为
int
。对于像x-y这样的算术表达式,x和y必须是相同的类型。在你的情况下,你有
ry - '0'
就类型而言,即
int - char
。因此,您的Java VM将自动将char转换为int,这将使得减号匹配的两个参数都是类型化的。这也是返回值为
int
的原因。您可以通过将rz的声明从
int rz
更改为
char rz
来检查:编译然后会抱怨您尝试将
int
(减法的结果)分配给
char
变量(rz)而不进行显式强制转换。     

要回复问题请先登录注册