Tôi đã thử nghiệm một số cách khác nhau để nhân các mục mảng với hằng số.Hành vi vòng lặp Java Array
Tôi đã tạo ra các kết quả khác nhau tùy thuộc vào cách tôi lặp qua mảng và tôi gặp khó khăn khi hiểu điều này (Tôi khá mới đối với Java và vẫn đang tìm hiểu cách mọi thứ được truyền hoặc tham chiếu).
Kiểm tra 1
int[] array = {1, 2, 3, 4};
for (int number : array)
{
number *= 2;
}
Hệ quả là mục mảng chưa sửa đổi:
{1, 2, 3, 4}
Nó có vẻ như number
không phải là mục mảng thực tế, nhưng một mới int
được khởi tạo với giá trị của nó. Đúng không?
thử nghiệm 2
Tôi nghĩ rằng bằng cách sử dụng một loạt các đối tượng có thể làm việc, giả sử number
là sau đó một tham chiếu đến mục mảng thực tế. Đây là thử nghiệm của tôi rằng việc sử dụng Integer
thay vì int
:
Integer[] array = {1, 2, 3, 4};
for (Integer number : array)
{
number *= 2;
}
Một lần nữa, kết quả là mục mảng chưa sửa đổi:
{1, 2, 3, 4}
thử nghiệm 3
Sau khi một số người đứng đầu gãi tôi đã thử phương thức vòng lặp khác, như sau:
int[] array = {1, 2, 3, 4};
for (int i = 0; i < array.length; i ++)
{
array[i] *= 2;
}
Hệ quả là mục mảng nhân:
{2, 4, 6, 8}
kết quả cuối cùng này có ý nghĩa với tôi, nhưng tôi không hiểu được những kết quả từ các thử nghiệm thứ hai (hoặc thứ nhất cho rằng vấn đề). Cho đến bây giờ, tôi đã luôn luôn giả định vòng lặp được sử dụng trong thử nghiệm 1 và 2 chỉ là một phiên bản viết tắt của vòng lặp được sử dụng trong thử nghiệm 3, nhưng chúng rõ ràng là khác nhau.
Tại sao tính năng này không hoạt động như tôi mong đợi? Tại sao các vòng lặp lại khác nhau?
trong trường hợp thứ ba, bạn đang làm như mảng [0] = mảng [0] * 2; , tức là bạn đang thay thế mảng bằng các giá trị nhân mới. –
Nói điều đó với tôi - Java là giá trị vượt qua. Java là giá trị theo từng giá trị. Java là giá trị theo từng giá trị. – csmckelvey