Tài liệu ngôn ngữ Java nói "Nếu kiểu nguyên thủy hoặc chuỗi được định nghĩa là hằng số và giá trị được biết tại thời gian biên dịch, trình biên dịch sẽ thay thế tên hằng số ở mọi nơi trong mã với giá trị của nó. được gọi là hằng số biên dịch. "Hằng số thời gian biên dịch và biến
Vì vậy, sự hiểu biết của tôi là nếu chúng ta có một đoạn mã:
private final int x = 10;
Sau đó, trình biên dịch sẽ thay thế tất cả các lần xuất hiện của 'x' trong mã với nghĩa đen '10'. Nhưng nói giả sử hằng số được khởi tạo với giá trị tại thời gian chạy,
private final int x = getX(); // here getX() returns an integer value at run-time.
Sẽ có bất cứ thả hiệu suất (nào có thể xảy không đáng kể) nó có thể được so sánh với thời gian biên dịch liên tục?
câu hỏi khác là liệu dòng dưới mã:
private int y = 10; // here y is not final
được xử lý trong cùng một cách như thời gian biên dịch liên tục bởi trình biên dịch?
EDIT: Cuối cùng, những gì tôi hiểu từ câu trả lời là:
final static
phương tiện thời gian biên dịch liên tục- chỉ
final
nghĩa của nó một hằng số nhưng được khởi tạo tại thời gian chạy - chỉ
static
có nghĩa là được khởi tạo vào thời gian chạy - mà không cần
final
là một biến và sẽ không được coi là không đổi.
là sự hiểu biết của tôi đúng chưa?
về điểm 2. Bạn sai rồi! cuối cùng int a = 1; a là hằng số thời gian biên dịch. cuối cùng int b; b = 1; b không phải là – landry