当我使用
时 String s = "12";
int n = Integer.parseInt(s);
这是n
值为12。对我来说没问题。
它在内部做什么。这里的内部流程是什么? 运行。有人可以解释一下吗?一个字符串如何真正转换为 整数。在给予任何downvote之前,请告诉我原因。我会纠正 我的错误下次。我搜索了这个问题。但是我没有 找到答案。
提前致谢。
答案 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模块。然后在跳转到方法实现后,将要求您下载源代码......快速而简单。