以下代码用于调试:
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)
但它工作正常,直到这种情况,我不太确定出了什么问题。
最佳答案
如有疑问,请添加更多诊断...删除执行两件事的语句。这:
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);
然后在调试器中,您应该能够轻松地在调用 BigInteger
之前查看 text
的值 - 这将非常清楚地显示问题。
要将字符数组转换为包含这些字符的字符串,您需要:
new String(array)
关于java BigInteger 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989906/