java中的parseLong()

今天项目中碰到一个parseLong()方法,传入的是一个String类型,得到一个Long,一开始感觉不就是类型转换嘛,后来发现还是有点小坑的。
首先parseLong(String str)它还会去调用一个更深的parseLong(String str, int radix),如果不传入的话,radix默认为10 ,那么这个方法究竟怎么工作的呢?
简单来说,就是将str按照radix的进制来转换,比如默认是10的话,那么parseLong("99", 10)得到的结果就是99 。既然如此,是不是觉得没啥大不了的,那么parseLong("99",8)会得到什么呢?直接将99转换成8进制应该得到143吧,那么就错咯,它会报错NumberFormatException,那么来读一下源码

点击查看代码
if (len > 0) {
            char firstChar = s.charAt(0);
            if (firstChar < '0') { // Possible leading "+" or "-"
                if (firstChar == '-') {
                    negative = true;
                    limit = Long.MIN_VALUE;
                } else if (firstChar != '+')
                    throw NumberFormatException.forInputString(s);

                if (len == 1) // Cannot have lone "+" or "-"
                    throw NumberFormatException.forInputString(s);
                i++;
            }
            multmin = limit / radix;
            while (i < len) {
                // Accumulating negatively avoids surprises near MAX_VALUE
                digit = Character.digit(s.charAt(i++),radix);
                if (digit < 0) {
                    throw NumberFormatException.forInputString(s);
                }
                if (result < multmin) {
                    throw NumberFormatException.forInputString(s);
                }
                result *= radix;
                if (result < limit + digit) {
                    throw NumberFormatException.forInputString(s);
                }
                result -= digit;
            }
        }

大概能发现,它是按照从第一位开始,每一位都不能超过这个radix。


原文链接:https://www.jianshu.com/p/2ce6b11ac25b
posted @ 2022-10-19 15:54  独苏  阅读(181)  评论(0编辑  收藏  举报