java對象轉字符串,這幾個方法你真的用對了嗎?


在平時的開發中,會遇到需要將對象轉為字符串的情況,比較常用的3個方法是:(String)、String.valueOf、toString。這時可能有點懵,既然有三個方法,那他們有什么不同?什么時候該用哪個?

今天我們就來聊聊這三個方法的區別。

(String)

  • 類型強轉,將Object強制轉為String類型。但是並不是所有類型都能強轉,需要注意的是類型原本就是字符串的對象才能轉成String類型,否則會拋出ClassCastException異常。
  • 比如我們放入redis字符串,然后從redis拿出時是Object類型,這時就可以使用(String)強轉。
  • 那當別人傳過來一個Object,我也不知道它到底是不是字符串,怎么辦?其實你可以先使用instanceof做一個類型檢查,以判斷是否可以進行強轉,如下:
    public static void main(String[] args) {
        Object a="字符串";
        if(a instanceof String){
            System.out.println("我是字符串,可以強制為字符串");
            System.out.println((String) a);
        }else{
            System.out.println("我不是字符串,臣妾辦不到");
        }
    }

toString

  • 在api文檔中是這樣說的:返回對象本身,也就是說對任何嚴格意義上的java對象都可以調用此方法,因為java.lang.Object類里已有public方法.toString()。
  • 但必須保證Object不是null值,不然會拋出NullPointerException異常,也就是平時常說的空指針異常
    public static void main(String[] args) {
        Object a=null;
        String s = a.toString();
        System.out.println(s);
    }

Exception in thread "main" java.lang.NullPointerException
  • 基本類型是沒有toString
  • 所以在調用toString前,要先判斷對象是否為空
    public static void main(String[] args) {
        Object a=getObject();
        if(null!=a){
            String s = a.toString();
            System.out.println(s);
        }
    }

String.valueOf

  • 這個方法是靜態的,直接通過String調用,它是在toString的基礎上實現的,但是不同的是,String.valueOf不用擔心object是否為null,可以說很完美。從以下源碼可以看到,valueOf已經做了空的判斷。
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
  • 雖然幫我們自動判空了,但是也存在一定的隱患,你可能已經注意到返回的是字符串的“null”,而不是null
    //錯誤寫法
    public static void main(String[] args) {
        Object a=null;
        if(String.valueOf(a)==null){
            System.out.println("空");
        }else{
            System.out.println("非空");
        }
    }
    //正確寫法
    public static void main(String[] args) {
        Object a=null;
        if(String.valueOf(a)=="null"){
            System.out.println("空");
        }else{
            System.out.println("非空");
        }
    }

總結

以上就是對平時常用的對象轉字符串的方法的介紹,個人建議使用String.valueOf來進行轉換,這個方法安全可靠。

關注公眾號:臻大蝦,分享更多java干貨


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM