美文网首页
java中的parseLong()

java中的parseLong()

作者: 文贞武毅 | 来源:发表于2019-07-29 19:56 被阅读0次

    今天项目中碰到一个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。

    相关文章

      网友评论

          本文标题:java中的parseLong()

          本文链接:https://www.haomeiwen.com/subject/bxpirctx.html