String类型转换小记

项目中尝尝会用到String类型转换,一般常用三种方法,(String),toString,String.valueOf(),这三种方法虽然都能把Obj类转换成我们想要的String类型,但是其中仍然有区别,如果不了解的前提下在项目中随意滥用稍不注意就会造成差错,下面做下小笔记。

首先是(String)

将object类强制转成String类型的,需要注意的是输入的Object类型必须是能转成String类型,否则虽然语法检查上不会出错,实际运行会产生强制转换类型错误。

    Object  t1 = 1;
    String t2 = (String)t1;

java.lang.ClassCastException: java.lang.Integer cannot be cast to 
java.lang.String
toString方法

因为Object类原本就已经存在toString()方法,原则上任何java对象都可以调用该方法转成Stirng类。

    Object t1 = new Object();
    t1.toString();

这种方法写代码中经常会用到,因为用起来实在是很方便啊,随手点一下就完事了,虽然用起来开心快乐,但是需要注意如果Object类是null,此时会出现空指针异常

    Object t1 = new Object();
    t1 = null;
    t1.toString();

java.lang.NullPointerException      
String.valueOf()方法

public static String valueOf(Object obj)
静态方法,直接通过String调用。
查看源码就可以知道这个方法内部做了判断,实际上是对第二种方式的升级版。

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

看起来很完美,但是,着重注意通过这个方法输出的null是<<字符串null,并不是null>>。

    String t1 = null;
    String t2 = String.valueOf(t1); 
    System.out.println(t2);
    System.out.println(t2.getClass());

    输出结果
    null
    class java.lang.String

很明显null通过转换后变成了字符串,此时如果项目中使用的是org.apache.commons.lang这类的StringUtils.isEmpty方法来判断是否有值,就会造成误判。

    String t1 = null;
    String t2 = String.valueOf(t1);     
    System.out.println(StringUtils.isEmpty(t1));
    System.out.println(StringUtils.isEmpty(t2));

    输出结果
    true
    false

相比前面两种方法,使用String.valueOf()虽然麻烦点,但是更加安全,但是特别要注意对null值的判断。

timg.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容