引言
平常經常使用這兩個方法進行int類型轉String,一般情況也不區分,今天就深究一下,它們的區別,平常應該使用那個方法更好一些。
Integer.toString()方法
作用:該方法返回指定整數的有符號位的String對象,以10進制字符串形式返回。
內部實現:
public static String toString(int i) {
if (i == Integer.MIN_VALUE) //等於最小值直接返回最小值字符串,避免getChars方法遇到最小值發生錯誤
return "-2147483648";
//判斷i的位數,若位負數增加1位用來保存符號位
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
//將i轉換位buf符號數組
getChars(i, size, buf);
//因爲buf數組是在方法內部生成,其他地方不會有其引用,所以直接將其引用給String內部的value保存,用來初始化String
return new String(buf, true);
}
可以看出Integer.toString()方法用來執行將int轉換爲String的操作,那麼根據方法複用的原則,可以推斷出String.toString(int)也應該是使用來該方法。那麼我們接着往下看。
String.valueof()方法
不同於Integer.toString(int),valueof有大量的重載方法,我們一一對其介紹。
public static String valueOf(Object obj)
作用:將對象轉換成String類型
源碼:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
可以看出這裏調用對象的toString(),所以寫對象時,最好重寫其toString()方法。
public static String valueOf(char data[])
作用:將字符數組轉換成String類型
源碼:
public static String valueOf(char data[]) {
return new String(data);
}
直接將字符數組作爲String的構造參數入參,內部是將數組複製了一份保存在了String中,用來初始化String。
public static String valueOf(char data[], int offset, int count)
作用:將offset位置至offset+count位置的data[]數組轉換成String類型
源碼:
public static String valueOf(char data[], int offset, int count) {
return new String(data, offset, count);
}
public static String valueOf(boolean b)
作用:將布爾轉換成String類型
源碼:
public static String valueOf(boolean b) {
return b ? "true" : "false";
}
可以看出並不能直接從boolean轉換成字符,而是判斷後,返回指定的字符串。
public static String valueOf(char c)
作用:將字符轉換成String類型
源碼:
public static String valueOf(char c) {
char data[] = {c};
return new String(data, true);
}
這裏先將字符轉換成字符數組,可能好奇String(data,true)這個構造方法與上面的String(data)有什麼不同,String(data, true)構造方法將引用傳遞給了String內部的value用來創建字符串,data在方法內部創建沒有其他引用,所以可以直接傳遞,節約內存空間。
public static String valueOf(int i)
作用:將int類型轉換成String類型
源碼:
public static String valueOf(int i) {
return Integer.toString(i);
}
與我們的推測相似,這裏調用了Integer.toString()的方法,可以看出String的valueof方法是將各種類型轉換成String,內部重載了不同類型轉String的處理,所以推薦使用valueof方法。
public static String valueOf(long l)
作用:將long類型轉換成String類型
源碼:
public static String valueOf(long l) {
return Long.toString(l);
}
public static String valueOf(float f)
作用:將float類型轉換成String類型
源碼:
public static String valueOf(float f) {
return Float.toString(f);
}
public static String valueOf(double d)
作用:將double類型轉換成String類型
源碼:
public static String valueOf(double d) {
return Double.toString(d);
}