Java toString 和String.ValueOf() 的区别和埋下的坑

Java字符串的toStiring 和String.ValueOf()都有一个相同的功能那就是把非String类型的对象,转换成String,比如:

String str1 = obj.toStiring(); 该方法是将Object类型的obj对象转换成String,但是这个的前提示要保证obj对象不为null,如果为null 将会抛出NullPointerException异常;

String str1 = String.valueOf(obj);该采用String的valueOf方法也会把Object对象转换成String类型,通过这种方法转型如果obj为null不会抛出NullPointerException异常;而是将obj对象转换成"null"字符串。这样 str1 就被赋值为 "null",这样乍一看没什么问题,感觉这样可以避免NullPointerException异常,如果后期要对str1要做其他类型的转换就会出问题比如:Integer.valueOf(str1);这是就会报错提示类型转换出错。到这里就会发现 String.valueOf()埋下的坑了。所以一般情况下在使用这两个方法前最后都要考虑一下null值得情况,不然后期发现问题,改数据将是非常痛苦的。

jdk里String# valueOf(Object)源码如下:

      public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }

      从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。我们应当注意到,当object为null 时,String.valueOf(object)的值是字符串”null”,而不是null!!!在使用过程中切记要注意。

而Object的toString()源码如下:

 
   public String toString() {
        return getClass().getName() + '@' + Integer.toHexString(hashCode());
    }

如果调用对象null 的话调用getName()方法就回抛出空指针异常。

所以在使用这两个方法时一定要慎重!


猜你喜欢

转载自blog.csdn.net/sunshine4214/article/details/80164160