一篇帶給你Object轉(zhuǎn)String
開發(fā)中,小伙伴一定經(jīng)常遇到將一個Object類型的字段轉(zhuǎn)換為String類型的字段。比如我們從一個類型定義為Map<String, Object>
Object轉(zhuǎn)換為String的方式有如下幾種:
- (String)object
- object.toString()
- Stirng.valueOf(object)
- ""+object
我們暫且先不討論哪種好,哪種不好,我們先認真考慮下從map中g(shù)et出來的value值存在幾種情況。
如果這個map是上游系統(tǒng)給我們的,秉持不相信上游系統(tǒng)的原則,那么某一個key為type對應(yīng)的value值可能存在如下幾種情況:
- value為字符串,符合傳遞要求
- value為其他類型,比如為Integer類型
- value為空字符串
- value為空格
- value沒傳值,默認為null
- map中不包含這個key
針對這些情況,接下來我們具體分析Object轉(zhuǎn)換為String的方式。
(String)object
(String)object是將Object類型的對象強制轉(zhuǎn)換為String類型。
對于空格、空字符串、null都可以轉(zhuǎn)換,但是Object對象的值類型不是字符串比如Integer類型時,會存在類型轉(zhuǎn)換異常錯誤。
- public static void main(String[] args) {
- /**
- * 為了兼容各種參數(shù),map的value值定義為了Object類型
- * 針對一個key為type的值,它的value存在以下幾種情況:
- * 1)value為字符串
- * 2)value為空字符串
- * 3)value為空格
- * 4)value沒傳值,默認為null
- * 5)map中不包含這個key
- */
- Map<String, Object> mapParams = new HashMap<String, Object>();
- TypeEntity entity = new TypeEntity();
- /**
- * 強制類型轉(zhuǎn)換
- */
- mapParams.put("type",1);
- System.out.println("使用強制類型轉(zhuǎn)換的結(jié)果為:" + (String) mapParams.get("type")) ;
- }
運行結(jié)果為:
- Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- at com.alipay.demo.StringTest.main(StringTest.java:30)
總結(jié):
強制類型轉(zhuǎn)換這種方式如果上游系統(tǒng)不是自己團隊的盡量不要使用,很容易因為數(shù)據(jù)類型不一致轉(zhuǎn)換報錯。
object.toString()
object.toString()對空格、空字符串、其他數(shù)據(jù)類型都可以進行轉(zhuǎn)換。需要注意,值為null時的空指針異常。
- /**
- * toString()
- */
- mapParams.put("type", null);
- System.out.println("toString()轉(zhuǎn)換的結(jié)果為:" + mapParams.get("type").toString());
運行結(jié)果為:
- Exception in thread "main" java.lang.NullPointerException
- at com.alipay.demo.StringTest.main(StringTest.java:39)
總結(jié):
我們在使用object.toString()需要對獲取的value值先進行null的判斷再轉(zhuǎn)換。值為null的場景有兩種情況:key對應(yīng)的value值為null或者map中不存在這個key值。
Stirng.valueOf(object)
Stirng.valueOf(object)可以對null、空格、空字符串、其他數(shù)據(jù)類型進行轉(zhuǎn)換,是一個比較安全的轉(zhuǎn)換方法。
需要注意的是當值為null的時候該方法會轉(zhuǎn)換為"null",這個值會影響業(yè)務(wù)后續(xù)的非空判斷。
我們查看Stirng.valueOf()方法的源碼:
- public static String valueOf(Object obj) {
- return (obj == null) ? "null" : obj.toString();
- }
valueOf()方法本質(zhì)是使用的obj.toString(),對于可能存在的空指針異常進行了判斷規(guī)避。
但是轉(zhuǎn)換的"null"可能會對我們的業(yè)務(wù)進行干擾,在使用這個方法的時候需要先判斷結(jié)果是否為null再進行轉(zhuǎn)換,當然如果沒有業(yè)務(wù)允許也可以不進行判斷。
- /**
- * Stirng.valueOf(object)
- */
- mapParams.put("type", null);
- System.out.println("Stirng.valueOf(object)轉(zhuǎn)換的結(jié)果為:" + String.valueOf(mapParams.get("type")));
- System.out.println(String.valueOf(mapParams.get("type")) == null);
- System.out.println("null".equals(String.valueOf(mapParams.get("type"))));
運行結(jié)果為:
- Stirng.valueOf(object)轉(zhuǎn)換的結(jié)果為:null
- false
- true
總結(jié):
Stirng.valueOf(object)是比較安全的轉(zhuǎn)換方式,但是需要特別注意當值為null的時候轉(zhuǎn)換為"null",避免對業(yè)務(wù)進行干擾,在使用的時候最好是加上判斷。
""+object
""+object此方法是利用字符串的拼接特點將其他類型的數(shù)據(jù)轉(zhuǎn)換為字符串,它和Stirng.valueOf(object)類似不用考慮空格、空字符串、null、和其他數(shù)據(jù)類型,但是需要注意當值為null的時候會轉(zhuǎn)換為"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"))));
運行結(jié)果為:
- null
- false
- true
今天就到這里了!
我是勾勾,愿您認真工作,快樂生活,開心每一天!