我在什么地方看到了下面的代码,我被(ry-'0')部分搞糊涂了。这是做什么的?bis是缓冲的输入流,输入是多个整数的行,每个整数由空格分隔(即2 3 4 5 6)。
static int num()throws IOException{
rz=0;
while((ry=bis.read())<'0' || ry>'9'){}
rz+=(ry-'0');
while((ry=bis.read())>='0' && ry<='9')
rz=rz*10+(ry-'0');
return rz;
}发布于 2010-12-17 01:33:47
ry-'0'将存储在ry中的ASCII码字符'0'-'9‘转换为相应的十进制值(0-9)。
“0”转换为0,“1”转换为1,依此类推。
发布于 2010-12-17 02:20:21
aix的答案是正确的,但让我添加一个小解释:
为了理解它,查看表达式ry-'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)。
https://stackoverflow.com/questions/4463657
复制相似问题