Khi nhìn vào các mã nguồn cho Integer.parseInt(String s, int radix)
(java 8, 1.8.0_131), tôi thấy khối bình luận sau:Tại sao parseInt cảnh báo của việc sử dụng valueOf
/*
* WARNING: This method may be invoked early during VM initialization
* before IntegerCache is initialized. Care must be taken to not use
* the valueOf method.
*/
Trong khi tôi hiểu được một phần đầu tiên về IntegerCache , Tôi không hiểu tại sao có cảnh báo về valueOf
và lý do tại sao trong ngữ cảnh này.
Tôi thấy rằng valueOf()
dựa trên parseInt()
, nhưng tôi vẫn không hiểu tại sao có cảnh báo này.
Ai đó có thể giải thích chính xác nhận xét cảnh báo tôi về điều gì (và ngữ cảnh không nên sử dụng valueOf) và điều gì có thể xảy ra sai.
Edit:
Các mã trong Integer.valueOf (int i) dường như đã thay đổi kể từ khi câu hỏi khác từ bình luận dưới đây được yêu cầu, nó bây giờ là
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
và cần được lưu từ lỗi xác nhận trước.
Có thể trùng lặp [Tại sao xác nhận được sử dụng trong phương thức Integer.valueOf của lớp Integer?] (Https://stackoverflow.com/questions/33891156/why-is-assert-used-in-the-integer- valueof-method-of-the-integer-class) – Blasanka
khẳng định dường như không được sử dụng trong java8 Integer.valueOf() @Blasanka, bạn có thể giải thích phiếu bầu trùng lặp được không, hoặc chỉ cho tôi mã mà vẫn bằng mã được liên kết trong mục tiêu dupe? – Michael