2017-08-05 69 views
5

我想了解Integer的ToString(),它看起來像這樣實施:構造函數String(int,int,char [])在哪裏定義?

public static String toString(int i) { 
    if (i == Integer.MIN_VALUE) 
     return "-2147483648"; 
    int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i); 
    char[] buf = new char[size]; 
    getChars(i, size, buf); 
    return new String(0, size, buf); 
} 

我跑進最後一行,它看起來並不像任何建設者在String類,除了這一個:

String(char value[], int offset, int count) 

...除了該函數被調用的炭[]參數第一,不像它是如何在Integer.toString正在使用()。我的印象是,將參數的順序改變爲方法簽名的改變,並且會對方法產生不同的覆蓋。

爲什麼這個工作,或者我解釋不正確?

+1

看看字符串的實現。它可能有一些私人的東西,不會出現在公共javadoc中。 –

+0

但(1+)用於檢查API並提出一個深思熟慮的問題。 –

+0

你在哪裏看到涉嫌的代碼?它不是[在Java 8中](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/9d617cfd6717/src/share/classes/java/lang/Integer.java#l397)。 – Boann

回答

10

這是使用封裝專用的String構造函數。它沒有出現在String Javadoc中,因爲它是封裝私有的。

如果你在同一個站點檢查String source code,你會看到

644  // Package private constructor which shares value array for speed. 
    645  String(int offset, int count, char value[]) { 
    646   this.value = value; 
    647   this.offset = offset; 
    648   this.count = count; 
    649  } 
相關問題