charAt的隐藏功能

153 阅读1分钟

今天日常做LeetBook,发现题解的时候有一个方法,是判断一个字符串第一个字符是不是0~9的数字,这里用了charAt这个方法,但是这个方法是返回指定下标的字符,难道返回后要一个一个判断是不是0到9吗?很显然不是,方法后面加了一个“-0”的操作,这样返回后,就变成了一个整数,示例如下:

String str = "42";
int num = str.charAt(0)-'0'; return 4;

其实这里返回的“4”,并不是字符串这个下标对应的数字4,而是ASCII码转换出来的4,我们的charAt返回字符“4”后减去字符“0”,底层计算其实是ASCII码的计算结果,就是

52('4')-48('0') = 4

简单说就是字符的0到9在ASCII码表里是48到57,我们用任意一个数字减去字符0,都能得到对应的整形数字。