String 與 基本類型 【vaynexiao】

String -> int / Integer

        String num = "123";
        Integer i21 = Integer.parseInt(num);
        Integer i22 = Integer.valueOf(num);
        System.out.println(i21+"==="+i22);//當num爲空字符串或null時,會java.lang.NumberFormatException
        int i23 = Integer.parseInt(num);
        int i24 = Integer.valueOf(num);
        System.out.println(i23+"==="+i24);
        //打印都是123===123

int / Integer -> String

        int i = 1;
        Integer i2 = new Integer(2);

        //1,強轉至String
//       String str1 = (String)i;編譯不通過,不可以強轉
//       String str2 = (String)i2;編譯不通過,不可以強轉

        //2,Integer.toString()
        String str3 = Integer.toString(i);
        String str4 = Integer.toString(i2);

        //3,.toString() 只適用Integer
//      String str5 = i.toString();報錯  int 沒有toString()
        String str6 = i2.toString();//調的還是靜態方法Integer.toString(),且不可能對null使用,會空指針異常
        
        //4,String.valueOf()
        String str7 = String.valueOf(i);
        String str8 = String.valueOf(i2);

        //5,追加""
        String str9 = i+"";
        String str10 = i2+"";

相關比較

第一種方法:s=i+"";   //會產生兩個String對象
第二種方法:s=String.valueOf(i); //直接使用String類的靜態方法,只產生一個對象

第一種方法:i=Integer.parseInt(s);//直接使用靜態方法,不會產生多餘的對象,但會拋出異常
第二種方法:i=Integer.valueOf(s).intValue();
//Integer.valueOf(s) 相當於 new Integer(Integer.parseInt(s)),也會拋異常,但會多產生一個對象

Integer(默認緩存127)

		Integer b1 = 12;
		Integer b2 = 12;
		System.out.println(b1==b2);//true

		Integer b3 = 128;
		Integer b4 = 128;
		System.out.println(b3==b4);//false
		//其實Integer這個包裝類直接賦值的話默認有一個緩存(-128到127)
		//如果改變值爲128,超出了範圍,就會底層重新new一個Integer,所以b3==b4爲false

		System.out.println(b2.intValue()==b1.intValue());//true 此時取得Integer對象的int屬性值,當然爲true

Long.valueOf 和 Long.parseLong

後者返回基本類型long,前者返回包裝類型Long,valueOf 本質區別就是裏面使用了parseLong,然後new 一個Long變爲包裝類而已。
其他基本類型大致同樣如此。看一下源碼區別也都大體相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章