Java—String.valueof()和Integer.toString()的不同

引言

平常經常使用這兩個方法進行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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章