在java中强制转换内部进程

时间:2013-04-09 12:12:07

标签: java

当我使用

   String s = "12";      
   int n = Integer.parseInt(s);

这是n值为12。对我来说没问题。

它在内部做什么。这里的内部流程是什么? 运行。有人可以解释一下吗?一个字符串如何真正转换为 整数。在给予任何downvote之前,请告诉我原因。我会纠正 我的错误下次。我搜索了这个问题。但是我没有 找到答案。

提前致谢。

4 个答案:

答案 0 :(得分:0)

查看Integer.parseInt()的内部代码,例如第444行的here

但是,如果您将Java安装中的src.zip作为源Integer.class附加到您喜欢的编辑器(例如Eclipse)中,这是最简单的方法 - 这样您就可以获得实际的实现。

答案 1 :(得分:0)

嗨,这是parseInt方法的实际实现,请通过::

    public static int parseInt(String s) throws NumberFormatException {
         return parseInt(s,10);
    }

    public static int parseInt(String s, int radix) throws NumberFormatException
    {
        if (s == null) {
            throw new NumberFormatException("null");
        }

    if (radix < Character.MIN_RADIX) {
        throw new NumberFormatException("radix " + radix +
                        " less than Character.MIN_RADIX");
    }

    if (radix > Character.MAX_RADIX) {
        throw new NumberFormatException("radix " + radix +
                        " greater than Character.MAX_RADIX");
    }

    int result = 0;
    boolean negative = false;
    int i = 0, max = s.length();
    int limit;
    int multmin;
    int digit;

    if (max > 0) {
        if (s.charAt(0) == '-') {
        negative = true;
        limit = Integer.MIN_VALUE;
        i++;
        } else {
        limit = -Integer.MAX_VALUE;
        }
        multmin = limit / radix;
        if (i < max) {
        digit = Character.digit(s.charAt(i++),radix);
        if (digit < 0) {
            throw NumberFormatException.forInputString(s);
        } else {
            result = -digit;
        }
        }
        while (i < max) {
        // 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;
        }
    } else {
        throw NumberFormatException.forInputString(s);
    }
    if (negative) {
        if (i > 1) {
        return result;
        } else {    /* Only got "-" */
        throw NumberFormatException.forInputString(s);
        }
    } else {
        return -result;
    }
    }

答案 2 :(得分:0)

在这篇文章中:how it's working  很好地展示了它是如何工作的。阅读后,您应该能够正确理解

答案 3 :(得分:0)

我建议将源代码附加到您喜欢的IDE中,当您需要某些内容时,您只需要跳转到任何库的源代码中。 最好的方法是使用IntelliJ IDEA并创建空的Maven模块。然后在跳转到方法实现后,将要求您下载源代码......快速而简单。