之所以从源头进行某种程度的简化,是因为在“传统”字符串解析循环中
for each digit y from left to right: x = 10 * x + y
您会遇到这样的问题:不可避免地,
10 * x时间的长度是线性的
x,并且每位数字的长度或多或少都会增加一个常数,这也是不可避免的。
(实际的实现比这聪明-它试图一次解析一个
int二进制数字的值,因此循环中的实际乘数很可能是1或20亿-但是,是的,它仍然是二次方)
也就是说,具有
10^6数字的数字至少是一个googol,并且比我听说过的甚至用于加密目的的任何数字都要大。您正在解析一个占用 2 MB内存
的字符串。是的,这需要一段时间,但是我怀疑JDK的作者没有看到针对如此罕见的用例进行优化的意义。



