報錯信息
項目Gosn 解析報錯,報錯信息如下。
java.lang.NumberFormatException: Bad offset/length: offset=0 len=0 in.length=0
仔細找了下發(fā)現(xiàn)是 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的構造函數(shù)如下(String 類型的入參數(shù))。
public BigDecimal(String val) {
this(val.toCharArray(), 0, val.length());
}
當我們傳入 String 類型的參數(shù)后,會被轉換為char數(shù)組,然后調用我們最上面貼的構造函數(shù)去構建 BigDecimal。當入參字符串為空字符串的時候就會出現(xiàn)last=-1 ,符合拋出異常的邏輯,就會拋出異常。