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

本文探讨了Java中String类的toStiring和String.ValueOf()方法在处理null值时的不同行为及其潜在风险。详细解释了这两种方法如何将非String类型的对象转换为String,并强调了在实际应用中需要注意的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()方法就回抛出空指针异常。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值