我们暂且先不谈论哪种好,哪种不好,我们先负责考虑下从map中get出来的value值存在几种情形。
如果这个map是上游系统给我们的,秉持不相信上游系统的原则,那么某一个key为type对应的value值可能存在如下几种情形:
value为字符串,符合通报哀求value为其他类型,比如为Integer类型value为空字符串value为空格value没传值,默认为nullmap中不包含这个key
针对这些情形,接下来我们详细剖析Object转换为String的办法。
(String)object(String)object是将Object类型的工具逼迫转换为String类型。
对付空格、空字符串、null都可以转换,但是Object工具的值类型不是字符串比如Integer类型时,会存在类型转换非常缺点。
publicstaticvoidmain(String[]args){/为了兼容各种参数,map的value值定义为了Object类型针对一个key为type的值,它的value存在以下几种情形:1)value为字符串2)value为空字符串3)value为空格4)value没传值,默认为null5)map中不包含这个key/Map<String,Object>mapParams=newHashMap<String,Object>();TypeEntityentity=newTypeEntity();/逼迫类型转换/mapParams.put("type",1);System.out.println("利用逼迫类型转换的结果为:"+(String)mapParams.get("type"));}
运行结果为:
Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.Stringatcom.alipay.demo.StringTest.main(StringTest.java:30)
总结:
逼迫类型转换这种办法如果上游系统不是自己团队的只管即便不要利用,很随意马虎由于数据类型不一致转换报错。
object.toString()object.toString()对空格、空字符串、其他数据类型都可以进行转换。须要把稳,值为null时的空指针非常。
/toString()/mapParams.put("type",null);System.out.println("toString()转换的结果为:"+mapParams.get("type").toString());
运行结果为:
Exceptioninthread"main"java.lang.NullPointerExceptionatcom.alipay.demo.StringTest.main(StringTest.java:39)
总结:
我们在利用object.toString()须要对获取的value值前辈行null的判断再转换。值为null的场景有两种情形:key对应的value值为null或者map中不存在这个key值。
Stirng.valueOf(object)Stirng.valueOf(object)可以对null、空格、空字符串、其他数据类型进行转换,是一个比较安全的转换方法。
须要把稳的是当值为null的时候该方法会转换为"null",这个值会影响业务后续的非空判断。
我们查看Stirng.valueOf()方法的源码:
publicstaticStringvalueOf(Objectobj){return(obj==null)?"null":obj.toString();}
valueOf()方法实质是利用的obj.toString(),对付可能存在的空指针非常进行了判断规避。
但是转换的"null"可能会对我们的业务进行滋扰,在利用这个方法的时候须要先判断结果是否为null再进行转换,当然如果没有业务许可也可以不进行判断。
/Stirng.valueOf(object)/mapParams.put("type",null);System.out.println("Stirng.valueOf(object)转换的结果为:"+String.valueOf(mapParams.get("type")));System.out.println(String.valueOf(mapParams.get("type"))==null);System.out.println("null".equals(String.valueOf(mapParams.get("type"))));
运行结果为:
Stirng.valueOf(object)转换的结果为:nullfalsetrue
总结:
Stirng.valueOf(object)是比较安全的转换办法,但是须要特殊把稳当值为null的时候转换为"null",避免对业务进行滋扰,在利用的时候最好是加上判断。
""+object""+object此方法是利用字符串的拼接特点将其他类型的数据转换为字符串,它和Stirng.valueOf(object)类似不用考虑空格、空字符串、null、和其他数据类型,但是须要把稳当值为null的时候会转换为"null"。
/""+object/mapParams.put("type",null);System.out.println(""+mapParams.get("type"));System.out.println((""+mapParams.get("type"))==null);System.out.println("null".equals((""+mapParams.get("type"))));
运行结果为:
nullfalsetrue
本日就到这里了!
我是勾勾,愿您负责事情,快乐生活,愉快每一天!
我们下篇文章见!