0

以下代码用于调试:

public static void main(String[] args) {
    BigInteger n = new BigInteger("10000000001");
    String sn = n.toString();
    char[] array = sn.toCharArray();
    //intend to change value of some char in array
    //not standard math operation
    BigInteger result = new BigInteger(array.toString());
}

它给了我错误:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "[C@86c347"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.math.BigInteger.<init>(BigInteger.java:316)
        at java.math.BigInteger.<init>(BigInteger.java:451)
        at debug.main(debug.java:14)

但它工作正常,直到这种情况下,我不太确定出了什么问题。

4

1 回答 1

4

如有疑问,请添加更多诊断...取出执行两件事的语句。这个:

array.toString()

不会做你期望的事情,因为数组不会覆盖toString(). 它会返回类似"[C@89ffb18". 您可以通过提取一个额外的局部变量来看到这一点:

BigInteger n = new BigInteger("10000000001");
String sn = n.toString();
char[] array = sn.toCharArray();
String text = array.toString();
BigInteger result = new BigInteger(text);

然后在调试器中,您应该能够轻松地查看text调用之前的值BigInteger- 这将非常清楚地显示问题。

要将 char 数组转换为包含这些字符的字符串,您需要:

new String(array)
于 2013-04-13T16:14:34.753 回答