报错信息
项目Gosn 解析报错,报错信息如下。
java.lang.NumberFormatException: Bad offset/length: offset=0 len=0 in.length=0
仔细找了下发现是 BigDecimal
报出的错误,下面BigDecimal
是初始化的代码时抛出错误的代码(部分代码)。
public BigDecimal(char[] in, int offset, int len) {
int begin = offset; // first index to be copied
int last = offset + (len - 1); // last index to be copied
String scaleString; // buffer for scale
StringBuilder unscaledBuffer; // buffer for unscaled value
long newScale; // the new scale
if (in == null) {
throw new NullPointerException("in == null");
}
if ((last >= in.length) || (offset < 0) || (len <= 0) || (last < 0)) {
throw new NumberFormatException("Bad offset/length: offset=" + offset +
" len=" + len + " in.length=" + in.length)
}
}
什么情况下会报错?
当符合以下代码逻辑时就会抛出错误
if ((last >= in.length) || (offset < 0) || (len <= 0) || (last < 0)) {
throw new NumberFormatException("Bad offset/length: offset=" + offset +
" len=" + len + " in.length=" + in.length);
}
什么样的字符串会抛出错误?
我的项目中使用的是使用String
类型的值初始化
BigDecimal
。BigDecimal
的构造函数如下(String
类型的入参数)。
public BigDecimal(String val) {
this(val.toCharArray(), 0, val.length());
}
当我们传入 String 类型的参数后,会被转换为char
数组,然后调用我们最上面贴的构造函数去构建 BigDecimal
。当入参字符串为空字符串的时候就会出现last=-1
,符合抛出异常的逻辑,就会抛出异常。
网友评论