2012-11-04 49 views
7

Các mã sau đây mang lại cho tôi: The local variable str may not have been initializedChuyển tuyên bố chưa được khởi tạo biến

public class experiment{ 

    public static void main(String[] args){ 

     int day = 1; 
     String str; 

     switch (day) { 
     case 1 : str = "nice"; 
     break; 
     } 

     System.out.println(str); 

    } 


} 

Vì vậy, tôi đã đưa ra một giá trị strnull, và nó làm việc nhưng tôi vẫn đang tự hỏi tại sao một trên các tài liệu làm việc mà không khởi tạo giá trị đầu tiên, tôi đã ba kiểm tra và tôi không nghĩ rằng tôi có bất kỳ lỗi chính tả:

public class SwitchDemo { 
    public static void main(String[] args) { 

     int month = 8; 
     String monthString; 
     switch (month) { 
      case 1: monthString = "January"; 
        break; 
      case 2: monthString = "February"; 
        break; 
      case 3: monthString = "March"; 
        break; 
      case 4: monthString = "April"; 
        break; 
      case 5: monthString = "May"; 
        break; 
      case 6: monthString = "June"; 
        break; 
      case 7: monthString = "July"; 
        break; 
      case 8: monthString = "August"; 
        break; 
      case 9: monthString = "September"; 
        break; 
      case 10: monthString = "October"; 
        break; 
      case 11: monthString = "November"; 
        break; 
      case 12: monthString = "December"; 
        break; 
      default: monthString = "Invalid month"; 
        break; 
     } 
     System.out.println(monthString); 
    } 
} 

Trả lời

13

Bởi vì có một tuyên bố default trường hợp trong switch của ví dụ tài liệu. Nó được gọi nếu không có các kết quả phù hợp khác của case. Trong mã của riêng bạn, bạn không có "dự phòng" như vậy.

Do đó, luôn có ít nhất một tuyên bố được gọi, sẽ luôn khởi tạo monthString.

Các vấn đề liên quan