Lưu ý: Tôi biết rõ rằng việc khởi tạo nó sẽ khắc phục sự cố; Tôi chỉ giả định trình biên dịch sẽ đi theo con đường thực hiện và thấy rằng foo thực sự sẽ được khởi tạo tại thời điểm mà nó cho thấy nó 'có thể' không được.Hành vi không mong muốn với khởi tạo Java
Giả thiết ban đầu của tôi sẽ là nếu độ dài không bao giờ trên 3, tôi sẽ không bao giờ cần cấp phát bộ nhớ cho nó để sử dụng.
này sẽ không bao giờ được sử dụng trong sản xuất, tôi chỉ đơn giản là tò mò
Xem ví dụ sau: -
List<String> foo;
int length = 5;
if (length > 3)
{
foo = new ArrayList<String>();
}
if (length > 4)
{
foo.add("bar");
}
Tại sao điều này gây ra sau đây sẽ được hiển thị?
Biến foo địa phương có thể không có được khởi
Chắc chắn sau khi chi nhánh, có bao giờ là một trường hợp trong đó foo không được khởi tạo. Tôi biết rằng nếu tôi phải làm: -
List<String> foo = null;
sẽ không có vấn đề biên dịch, nhưng tại sao tôi cần phải làm điều này?
@down cử tri, bạn có thể ít nhất cung cấp lý do không? – chrisw