Có rất nhiều cuộc thảo luận trong stackoverflow liên quan đến việc truyền theo giá trị và chuyển qua tham chiếu. Nhưng tôi muốn biết điều gì đang xảy ra trong kịch bản sau đây? Trang này cho biết java được truyền theo giá trị. Is Java "pass-by-reference" or "pass-by-value"?.Danh sách chuyển Java sang các phương thức hoạt động như được chuyển qua tham chiếu
Trong trường hợp mã sau, phần tử được xóa khỏi phương thức removeElement, nó sẽ xóa phần tử thứ 5 khỏi danh sách khi tôi in danh sách.
public class Load {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.addAll(Arrays.asList(1,1,2,3,5,5,13,21));
removeElement(list);
System.out.println(list);
}
public static void removeElement(List<Integer> list){
list.remove(5);//removes element at index 5
}
}
Đầu ra của chương trình là [1, 1, 2, 3, 5, 13, 21]
.
Ai đó có thể giải thích cách giá trị này vượt qua giá trị thay vì truyền theo tham chiếu?
Không thể đây không phải là sự lừa đảo. –
Trên thực tế, nói rằng Java là "pass-by-value" là không cần thiết gây nhầm lẫn, và nó đòi hỏi phải xoắn ý nghĩa bình thường của các từ tiếng Anh. Java có hai loại giá trị: kiểu nguyên thủy và kiểu tham chiếu (đối tượng và mảng). Đối với các kiểu nguyên thủy, giá trị được chuyển. Và đối với các loại tham chiếu, tham chiếu được chuyển. Một số người muốn thêm rằng tham chiếu này được chuyển "theo giá trị" nhưng điều đó không thêm bất kỳ điều gì vào sự hiểu biết của bất kỳ ai về chủ đề đó. Vì tham chiếu được chuyển cho các loại tham chiếu, bạn sẽ thấy các sửa đổi bạn thực hiện cho đối tượng trở lại trong trình gọi của phương thức. –