2017-08-05 34 views
5

Tôi cố gắng để hiểu việc thực hiện Integer ToString(), mà trông như thế này:Chuỗi hàm tạo (int, int, char []) được định nghĩa ở đâu?

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); 
} 

Và tôi chạy vào dòng cuối cùng, mà không giống như bất kỳ của các nhà thầu trong lớp String , ngoại trừ trường hợp này:

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

... trước tiên, không giống như hàm này được sử dụng trong Integer.toString(). Tôi đã có ấn tượng rằng việc thay đổi thứ tự các đối số được tính là một sự thay đổi trong chữ ký của phương thức, và sẽ là một sự ghi đè khác nhau của phương thức.

Tại sao tính năng này hoạt động hoặc tôi giải thích điều này không chính xác?

+1

Hãy xem việc thực hiện String. Nó có thể có một số công cụ riêng tư gói sẽ không hiển thị trong javadoc công cộng. –

+0

Nhưng (1+) để kiểm tra API và hỏi một câu hỏi chu đáo. –

+0

Bạn thấy mã bị cáo buộc ở đâu? Nó không phải là [trong Java 8] (http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/9d617cfd6717/src/share/classes/java/lang/Integer.java#l397). – Boann

Trả lời

10

Đó là sử dụng trình tạo gói riêng tư String. Nó không hiển thị trong Javadoc String, vì nó là gói riêng tư.

Nếu bạn đánh dấu vào String source code trên cùng một trang web, bạn sẽ thấy

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  } 
Các vấn đề liên quan