天天看點

String 轉換 | 學習筆記

開發者學堂課程【Java面試疑難點串講1:面試技巧及語言基礎:String 轉換】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/24/detail/492

String 轉換

内容介紹

一、String 轉換

用(String)強轉,什麼場景使用 toString() 強轉?

Object 類之中提供有一個 toString() 方法,那麼也就意味着所有類的對象都具有此方法。

那麼對于此方法隻有一個核心作用:在于将對象的内容變為字元串。

首先來觀察一下 Object.toString() 方法的實作:

public String toString() {

return getClass().getName()+

”@”+Integer.toHexString(hashCode());

}

如果說現在發生了 String 向 Object 類的向上轉型(不去考慮出于什麼樣原因才需要進行轉型)

package cn.mldn.demo;

class Member {

@Override

Public String toString() {

Return

”是一個人。”;

   }

}

public class TestStringType {

public static void main(String[ ] args) {

//

忽略轉型的目的,隻關心技術的實作

Object objA=

”Hello”;  //String向Object轉型,會使用不同的類加載器

Object objB=new Member();  //

自定義類,會使用不同的類加載器

//

要取出資料,需要考慮類型

String strA=(String) objA;   //

擷取内容

//String

是Object子類,是以現在的toString()調用的是String類被覆寫的方法

String strB=objA.toString();  //

擷取内容

System.out.println(strA);    //

向下轉型獲得的

System.out.println(strB);    //

通過子類方法覆寫獲得的

//

以上的兩種處理方法一樣,隻限于系統提供String類,但是如果是自定義類

Member memA=(Member) objB;  //

向下轉型

System.out.println(memA.toString()); //

調用的是被子類所覆寫寫過的方法

//

但是如果說你現在調用的是objB類的toString(),則就表示你要轉換的類型不是Member,而是String

String str=objB.toString();

如果要是具體點說:使用 toString( )容易造成空指向異常;

package cn.mldn.demo;

public class TestStringType {

public static void main(String[ ] args) {

//

忽略轉型的目的,隻關心技術的實作

String str = null;

Object objA=str;  //String

向Object轉型,會使用不同的類加載器

//

要取出資料,需要考慮類型

String strA=(String) objA;   //

擷取内容

System.out.println(strA);    //

向下轉型獲得的,null

//String

是Object子類,是以現在的toString()調用的是String類被覆寫的方法

String strB=objA.toString();  //

擷取内容

System.out.println(strB);    //

通過子類方法覆寫獲得的

}

}

總結:如果你現在使用的是 String,那麼在不為 null 的情況下,使用強制轉型和 toString() 方法效果一樣,但是如果為 unl l,則就會出現 NullPointerException,保險的做法是:使用強制轉型,但是如果确定不為 unll 的情況下,則兩種方式對 String 操作的效果是一樣的(隻有String是,其他的類都沒有,其他的類如果要變為指定類型隻能夠使用強制向下轉型)。