溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Object轉(zhuǎn)String

發(fā)布時(shí)間:2021-09-13 14:48:27 來源:億速云 閱讀:205 作者:柒染 欄目:web開發(fā)

今天就跟大家聊聊有關(guān)如何使用Object轉(zhuǎn)String,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

如何使用Object轉(zhuǎn)String

開發(fā)中,小伙伴一定經(jīng)常遇到將一個(gè)Object類型的字段轉(zhuǎn)換為String類型的字段。比如我們從一個(gè)類型定義為Map<String, Object>

Object轉(zhuǎn)換為String的方式有如下幾種:

  • (String)object

  • object.toString()

  • Stirng.valueOf(object)

  • ""+object

我們暫且先不討論哪種好,哪種不好,我們先認(rèn)真考慮下從map中g(shù)et出來的value值存在幾種情況。

如果這個(gè)map是上游系統(tǒng)給我們的,秉持不相信上游系統(tǒng)的原則,那么某一個(gè)key為type對(duì)應(yīng)的value值可能存在如下幾種情況:

  1. value為字符串,符合傳遞要求

  2. value為其他類型,比如為Integer類型

  3. value為空字符串

  4. value為空格

  5. value沒傳值,默認(rèn)為null

  6. map中不包含這個(gè)key

針對(duì)這些情況,接下來我們具體分析Object轉(zhuǎn)換為String的方式。

(String)object

(String)object是將Object類型的對(duì)象強(qiáng)制轉(zhuǎn)換為String類型。

對(duì)于空格、空字符串、null都可以轉(zhuǎn)換,但是Object對(duì)象的值類型不是字符串比如Integer類型時(shí),會(huì)存在類型轉(zhuǎn)換異常錯(cuò)誤。

public static void main(String[] args) {        /**         * 為了兼容各種參數(shù),map的value值定義為了Object類型         * 針對(duì)一個(gè)key為type的值,它的value存在以下幾種情況:         * 1)value為字符串         * 2)value為空字符串         * 3)value為空格         * 4)value沒傳值,默認(rèn)為null         * 5)map中不包含這個(gè)key         */        Map<String, Object> mapParams = new HashMap<String, Object>();        TypeEntity entity = new TypeEntity();        /**         * 強(qiáng)制類型轉(zhuǎn)換         */        mapParams.put("type",1);        System.out.println("使用強(qiáng)制類型轉(zhuǎn)換的結(jié)果為:" + (String) mapParams.get("type")) ; }

運(yùn)行結(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é):

強(qiáng)制類型轉(zhuǎn)換這種方式如果上游系統(tǒng)不是自己團(tuán)隊(duì)的盡量不要使用,很容易因?yàn)閿?shù)據(jù)類型不一致轉(zhuǎn)換報(bào)錯(cuò)。

object.toString()

object.toString()對(duì)空格、空字符串、其他數(shù)據(jù)類型都可以進(jìn)行轉(zhuǎn)換。需要注意,值為null時(shí)的空指針異常。

 /**  * toString()  */ mapParams.put("type", null); System.out.println("toString()轉(zhuǎn)換的結(jié)果為:" + mapParams.get("type").toString());

運(yùn)行結(jié)果為:

Exception in thread "main" java.lang.NullPointerException     at com.alipay.demo.StringTest.main(StringTest.java:39)

總結(jié):

我們?cè)谑褂胦bject.toString()需要對(duì)獲取的value值先進(jìn)行null的判斷再轉(zhuǎn)換。值為null的場(chǎng)景有兩種情況:key對(duì)應(yīng)的value值為null或者map中不存在這個(gè)key值。

Stirng.valueOf(object)

Stirng.valueOf(object)可以對(duì)null、空格、空字符串、其他數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,是一個(gè)比較安全的轉(zhuǎn)換方法。

需要注意的是當(dāng)值為null的時(shí)候該方法會(huì)轉(zhuǎn)換為"null",這個(gè)值會(huì)影響業(yè)務(wù)后續(xù)的非空判斷。

我們查看Stirng.valueOf()方法的源碼:

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

valueOf()方法本質(zhì)是使用的obj.toString(),對(duì)于可能存在的空指針異常進(jìn)行了判斷規(guī)避。

但是轉(zhuǎn)換的"null"可能會(huì)對(duì)我們的業(yè)務(wù)進(jìn)行干擾,在使用這個(gè)方法的時(shí)候需要先判斷結(jié)果是否為null再進(jìn)行轉(zhuǎn)換,當(dāng)然如果沒有業(yè)務(wù)允許也可以不進(jìn)行判斷。

 /**  * 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"))));

運(yùn)行結(jié)果為:

Stirng.valueOf(object)轉(zhuǎn)換的結(jié)果為:null false true

總結(jié):

Stirng.valueOf(object)是比較安全的轉(zhuǎn)換方式,但是需要特別注意當(dāng)值為null的時(shí)候轉(zhuǎn)換為"null",避免對(duì)業(yè)務(wù)進(jìn)行干擾,在使用的時(shí)候最好是加上判斷。

""+object

""+object此方法是利用字符串的拼接特點(diǎn)將其他類型的數(shù)據(jù)轉(zhuǎn)換為字符串,它和Stirng.valueOf(object)類似不用考慮空格、空字符串、null、和其他數(shù)據(jù)類型,但是需要注意當(dāng)值為null的時(shí)候會(huì)轉(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"))));

運(yùn)行結(jié)果為:

null false true

看完上述內(nèi)容,你們對(duì)如何使用Object轉(zhuǎn)String有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI