关于toString()、string.valueOf()、""三种转换字符串方式的比较及mysql中空字段的转换

一、关于三种方式的效率问题在此就不做过多的讨论了。toString()>String.valueOf()>""。在执行效率上toSting()是最快的。

二、关于“”和null能使用哪种方式进行转换字符串及转换后是什么?

1.首先来看“”的转换

   public static void main(String[] args) {
        System.out.println("".toString());
        System.out.println(String.valueOf(""));
        System.out.println(""+"");
    }

我们可以看到控制台上什么都都没有输出,也没有报错,证明如果获取到的字段是“”的话进行字符串转换可以使用任意一种方式都没有问题。

2.接下来是null的转换

    public static void main(String[] args) {
   
        System.out.println(null+"");
        System.out.println(String.valueOf(null));
    }

 我们可以看到null没有toString()方法,并且String.valueOf会报错,但是如何我们换一种写法,如下

    public static void main(String[] args) {
        Object obj = null;
        System.out.println(obj.toString());

    }

 

我们可以看到tostring()会报空指针 ,但是valueof()却返回了null;

    public static void main(String[] args) {
        Object obj = null;
        System.out.println(String.valueOf(obj));

    }

这样就没一点问题,这是什么原因呢?

这里我们可以看一下valueOf()的源码,发现valueOf()方法重载了,如果直接使用String.valueOf(null),我们会发现进的是valueOf(char data[])的这个方法,所以会报错。

三、以mysql为例,从数据库中取到的参数如何转换?

场景1:我们经常会遇到这种情况,A提供接口,B会将查询到的数据转成字符串加密后进行推送,当B推送过来的数据中的某个字段可能存在空的可能,这时候我们要将对象类型转成string进行操作。

1.传输过来的数据进行解密后,转成map,其中map中不存在key为ss的数据,我们发现使用tostring()方法时报错。

2.往mysql中插入一条数据,如果某个字段不插值则默认为(NULL)。那么我们查询出来的字段时什么?我们可以看到取出来的值是null。如果我们直接给字段插入null,会发现mysql会将null默认写成(NULL)。下面是mysql的一条数据。

3.如果我们插入的是一个空字符串呢?如果是空字符串则取出来后仍然是空字符串。

通过以上分析,我们可以得出如下结论:

          (1)“”转字符串的速度是最慢的,但是没任何问题,null可以转成字符串;

          (2)toString()方式是最快的,但是将null转成字符串的时候会报空指针异常;

          (3)String.valueOf()方式速度比toString()次之,同时转换null的时候不会报错,但是要注意将null赋值给以对象,然后再转换,如果直接传入null会报错,原因是null在重载的时候是不能重载给基础数据类型的,注意,这里的valueOf(char data[]),不是valueOf(char data),所以这里不是基础数据类型,是一个字符组。选择构造器的时候要选择最精确的一个,如何理解最精确呢?如果一个方法或构造器可以接受传递给另一个方法或构 造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。这里object显示是可以接收任何类型的参数的,显然没有char data[]精确,因此传入null会调用valueOf(char data[])。

四、org.apache.commons.lang的两个方法stringUtils.isEmpty()和stirngUtils.isblank()两个方法的比较,先看源码

isEmpty()当参数为null或“”的时候返回true,当参数为“ ”有空格的时候会返回false,或者参数为“null”的时候返回false;

isBlank()当参数为null或“”的时候返回true,我们发现内部有去空格的代码,因此参数为“ ”有空格的时候返回的也是true,但是同样参数为“null”的时候会返回false。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java旅途

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值