开发中,小伙伴一定经常遇到将一个Object类型的字段转换为String类型的字段。比如我们从一个类型定义为Map<String, Object&\ / B \gt;

Object转换为String的方式有如下几种:

  • (Stria p P 1ng)object
  • object.toString()
  • Stirng.vaR W ! u , `lueOf(object)
  • “”+object

我们暂且先不讨论哪种好,哪种不好,我们先认真考虑下从map中get出来的value值存在几种情况。

如果这个map是上游系统给我们的,秉持不相信上游系统的% M . H F / #原则,那么某一个key为type对应的value值可能存在如下L E ) ) B F [ G几种情况:

  1. value为字符串,符合传递要求
  2. value为其他类型,比S F = \如为Integer类型
  3. value为空字符串
  4. value为空格
  5. value没传值,默认为nulE n 1 ;l
  6. map中不包含这个key

针对这些情况,接下来我们具体分析Object转换为Stri2 T 5 O V @ ~ bng的方式。

(String)object

(Strinx x Y ? Lg)object是将Object类型的对象强制转换为String类型。

对于空格、空字符串、null都可以转换,但是Object对象的值类型不是字符串比如Integer类型时,会存在类型转换异常错误。

  1. publicstJ \ P L ;aticvoidmain(String[]ar^ - j @gs){
  2. /**
  3. *为了兼容各种参数,map的value值定义为了Object类型
  4. *针对一个key为type的值,它的value存在以下几种情况:
  5. *1)value为字符串
  6. *2)value为空字符串
  7. *3)value为空格
  8. *4)value没传值,默认为null
  9. *5)map中不包含这个key
  10. */
  11. Map@ C ]<String,Object>mapParams=newHashMap<String,Object>(/ q . Y l o G * -);
  12. Ty. $ Z H } h X FpeEntityentity=newTypeEntity();
  13. /**
  14. *强制类型转换
  15. */
  16. mapPar7 k t J +ams.put("type",1);
  17. System.out.println("使用强制类型转换的结果为:"+(String)mapParE n ~ P D +ams.get("type"));
  18. }

运行结果为:

  1. Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercann\ B zotbecasttojava.lang5 9 [ + f U v x.String
  2. atcom.alipay.demo.StringTest.main(Stz 3 - B 8 qringTest.java:30)

总结:

强制类型转换这种方式如果上游系统不? X a $ a (是自己团队的尽量不要使用,很容易因为数据类O f # j | 2型不一致转换报错。

object.toString()

object.toStrin3 q 8 z | d m Og()对( B D e h b空格、空字符串、其他数据类型都可以进行转换。需要注意A & u,值为null时的空指针异常。

  1. /**
  2. *toString()
  3. */
  4. mapParams.put("type",null);
  5. System.out.$ u 7println("toString()转换的结果为:"+mapParams.get("ty1 # _ p F Q b $pe").toString());

运行结果为:

  1. Exceptioninthread"main"java.lau Q s \ 2 -ng.NullPointerException
  2. atcom.alipay.demo.StringTest.main(StringTest.java:39)

总结:

我们在使用object.toString()需要对获取的value值先进行null的判断C _ $ I j 2 q {再转换。值为null的场景有两种情况:key对应的value值为nr ] P Iull或者map中不存在这个key值。

Stirng.valueOf(object)

Stirng.valueOf(object)可以对nulY & D e i q j Nl、空格、空字符串、其他数据类型进行转换,是一个比较安全的转换方法。

需要注意的是当值为null1 1 + & 0的时候该方法会转换为”null”,这个值会影响业务后续的非空判断。

我们查看Stirng.valueOf()方法的源码:

  1. publicstaticStringvalueOf(Objectobj){
  2. return(obj==null)?"null":obj.toString();
  3. }

valueOf()方法本质是使用的obj.tv H ; & e i VoString(),对于可能存在的空指针异常进行了判断规避。

但是转换的”null”可o 8 @能会对我们的业务进行干扰,在使用这个方法的时候需要先判断结果是否为null再进行转换,当然如果没有业务允许也可以不进行判断。

  1. /**
  2. *Stirng.valuet 6 W t v B ~ i #Of(object)
  3. */
  4. mapParams.put("type",null);
  5. System.out.println("Stirng.valueOf(object): 6 R V转换的结果为:"+String.valueOf(mapParams.get("type")));
  6. System.out.println(String.valueOf(mapParams.get("type"))==null);
  7. System.out.println("null".equals(String.valueOf(maI = F upParams.g_ 1 6 qet("type"))));

运行结果为:

  1. Stirng.valueOf(object)转换的结果为:Y g h t [ J v 2 cnull
  2. false
  3. true

总结:

Stirng.valueOf(object)是比较安全的转换方式,但是需要特别注意当值M 6 A 9 K ~ P为null的时候转换为”null”,避免对B 2 x业务进行干扰,在使用的时候最好是加上判Y 2 ) Y }断。

“”+object

“”+object此方法是利用字T * Z E x符串的拼接特点将其他类型的数据转换为字符串,它和Stirng.valueOf(object)类似不用考虑空格、空字符串、null、和其他数据类型,但是需要注意当值为null的时候会转换为”null”。

  1. /**
  2. *""+objecR S U ht
  3. */
  4. mapParams.puU g m n \t("type",null);
  5. System.out.println(""+mapParams.; - ^ Rget("type"));
  6. SysteN G w l .m.out.G . & \ 0printl@ q 4 U z ] V !n((""+mapParams.get("type"))==null);
  7. System.out.println("nullw Z [ B Z v a $".equals((""+mapParams.get("type"))));

运行结果为:

  1. null
  2. f4 # ? H \ \ nalse
  3. true

今天就到这里了!

我是勾勾,愿您认真工作,快乐生活,开心每一天!