2016-03-20 38 views
5

Tôi không hiểu tại sao tôi không thể gán giá trị cho các phần tử của mảng bằng cách sử dụng vòng lặp nâng cao. Ví dụ: sử dụng vòng lặp như thếTăng cường cho vòng lặp không hoạt động để gán giá trị cho một mảng (Java)

int[] array = new int[5]; 
    for(int i = 0; i < 5; i++) 
     array[i] = 10; 

sản xuất những gì tôi muốn. Nhưng tại sao mà không làm việc với "cho mỗi":

for(int element : array) 
     element = 10; 

Có bất kỳ lý do cụ thể đó là trường hợp hay tôi làm điều gì sai?

Trả lời

8

Trong tăng cường cho vòng lặp element là biến cục bộ chứa tham chiếu (hoặc giá trị trong trường hợp nguyên thủy) cho phần tử hiện tại của mảng hoặc Iterable bạn đang lặp lại.

Gán cho nó không ảnh hưởng đến mảng/Iterable.

Đó là tương đương với:

int[] array = new int[5]; 
for(int i = 0; i < 5; i++) { 
    int element = array[i]; 
    element = 10; 
} 

nào cũng sẽ không sửa đổi mảng.

Nếu bạn cần sửa đổi mảng, sử dụng nên sử dụng vòng lặp thông thường.

0

Các tăng cường cho vòng lặp bạn sử dụng:

for(int element : array) 
    element = 10; 
  1. Trong java chúng tôi có tài liệu tham khảo tham khảo một đối tượng. Tại một thời điểm, một tham chiếu có thể chỉ tham chiếu đến một đối tượng. Nếu nó được thực hiện để tham chiếu một đối tượng khác thì nó sẽ mất tham chiếu đến đối tượng trước đó. Khi bạn sử dụng = sau đó bạn thực hiện element để tham khảo khác tức là giá trị 10.

  2. Đây elementtype int, đó là primitive loại. Ngay cả khi đó là số Integer thì cũng Integerimmutable bạn sẽ không thể thực hiện bất kỳ sửa đổi nào trong đối tượng là sửa đổi sẽ luôn dẫn đến một đối tượng riêng biệt.

Nếu nó đã có trường hợp như sau cho một số lớp Tuỳ chỉnh nói Student.java Đối với một số List<Student> students.

for(Student std : students){ 
    std.setName("eureka"); 
} 

Bây giờ lặp lại danh sách và in tên của mỗi học sinh sẽ có dẫn đến in ấn eureka cho mỗi học sinh. Nhưng lưu ý rằng ngay cả trong trường hợp này sử dụng = sẽ lại tạo ra kết quả tương tự như bạn đang nhận được (như một lần nữa bạn đã tham chiếu biến cho đối tượng khác, nó sẽ không còn tham chiếu đến đối tượng ban đầu của danh sách).

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