Tất cả các đối tượng trong Java đều nằm trên heap. Tôi không hoàn toàn chắc chắn những gì bạn có nghĩa là "truy cập các đối tượng từ đống". Những thứ duy nhất được lưu trữ trên stack là danh sách các hàm được gọi vào ngữ cảnh hiện tại và các biến và tham số cục bộ của chúng. Tất cả các biến và tham số cục bộ là các kiểu hoặc tham chiếu nguyên thủy.
Nếu bạn phân bổ một đối tượng bằng cách sử dụng new
(là cách duy nhất để phân bổ các kiểu không nguyên thủy; có điều này bao gồm các loại mảng), thì đối tượng được cấp phát trên heap và tham chiếu đến đối tượng đó được lưu trữ trên stack hoặc heap, tùy thuộc vào nếu tham chiếu được lưu trữ trong một biến địa phương/tham số hoặc là một thành viên của đối tượng khác.
Khi được chuyển thành tham số cho hàm, tất cả đối tượng được truyền theo tham chiếu - nếu hàm sửa đổi tham số, đối tượng gốc cũng được sửa đổi. Về cơ bản, người ta cũng có thể nói rằng các tham chiếu đối tượng được truyền theo giá trị - nếu bạn thay đổi một tham số để chỉ một đối tượng mới, nó sẽ tiếp tục tham chiếu đến đối tượng đó trong suốt thời gian của hàm, nhưng đối tượng ban đầu được truyền vào vẫn sẽ đề cập đến bất cứ điều gì nó đã nói đến trước đây. Các kiểu nguyên thủy cũng được truyền theo giá trị.
Nguồn
2008-11-14 03:59:38
Câu hỏi hay - Tôi ước mình biết thêm về java; một câu trả lời tốt cho điều này sẽ là một sự khởi đầu cho sự giác ngộ của tôi :) –