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變爲包裝類而已。
其他基本類型大致同樣如此。看一下源碼區別也都大體相同。