为什么我不喜欢用Long.valueOf()去将String转成long

项目中经常看到有人喜欢用Long.valueOf()去将String转成long,我都忍不住去改Convert.asLong()。
原因是如果字符串不管是null还是空串,Long.valueOf()都会抛出异常,导致一些不必要的线上故障( java.lang.NumberFormatException : For input string: “”)。而Convert.asLong()能将null或空串直接转成0,也可以指定默认值。

总结

我觉得相对来说,用Convert.asLong()能规避风险,减少调用Long.valueOf()之前的一系列为空判断。同理,其他类型转换也是如此。

Long.valueOf()转字符串其实也是调用parseLong()去实现的
下面是parseLong()部分源码
 public static long parseLong(String s, int radix)throws NumberFormatException
{
  if (s == null) {
  //如果字符串为null,抛异常
    throw new NumberFormatException("null");
   }
   int i = 0, len = s.length();
   if (len > 0) {
     //转换
    } else {
    //空串抛异常
    throw NumberFormatException.forInputString(s);
    }
    return negative ? result : -result;
    }
Convert.asLong()源码
 try {
   return (new ConvertManager.ChainImpl(this, this.getTargetType(targetType))).convert(value);
    } catch (ConvertFailedException var5)     {
    //有传默认值返回默认值,没有就0
     if (var5.isDefaultValueSet()) {
         return defaultValue == NO_DEFAULT_VALUE ? var5.getDefaultValue() : defaultValue;
     } else {
        throw var5;
      }
  }

你可能感兴趣的:(JAVA)