Có bao nhiêu biến được tạo ra trong khi gọi hàm?

em newbie muốn hỏi là trong 1 lần gọi hàm thì nó tạo ra bao nhiêu biến?
theo em đọc trên mạng của 1 bài viết thì nó viết như sau:

    public class Main {
    public static void modify(int x, int y) {
        x = 100;
        y = 200;
        System.out.println("X - Y from modidy: " + x + " - " + y);
    }
    public static void main(String[] args) {
        int x = 1;
        int y = 2;

        System.out.println("X - Y before modidy: " + x + " - " + y);
        
        modify(x, y);

        System.out.println("X - Y after modidy: " + x + " - " + y);
    }
  }

chỗ này em thắc mắc là chỗ phần gọi hàm nó sẽ tạo ra 2 biến copy của x,y rồi nó gán 2 biến x,y copy đó cho x,y trong hàm đúng ko ạ, rồi trong hàm thay đổi biến x,y chứ có phải x,y copy đâu mà nó vẽ thế kia
link đây : https://shareprogramming.net/co-che-pass-by-value-va-pass-by-reference-trong-java/

Trong Java, biến bạn truyền vào như vậy sẽ được tạo ra 1 cái copy của biến đó, xCopy và yCopy trong trường hợp này khi bạn truyền x, y vào. Tất cả những operation sẽ được thực thi trên 2 biến copy đó. Do đó, khi hàm modify hoàn tất thì giá trị bị thay đổi là giá trị của biến copy, biến truyền vào không bị ảnh hưởng gì hết.

2 Likes

Bạn hiểu sai rồi nhé, không hề có chuyện gán ngược XCopyYCopy về cho xy.

2 Likes

Trong bài viết của tác giả có 2 chỗ không đúng:
1.

C/C++ hay Java đều không hoán đổi giá trị nếu viết như trên. Nên lời dẫn này không tốt và dễ đánh lạc hướng suy nghĩ cho người mới học rằng trong C/C++ viết như trên thì swap được.

image

Stack memory sau khi modify() thực thi -> Câu này sẽ được hiểu là phần này:

modify(x, y);
System.out.println("X - Y after modidy: " + x + " - " + y);

Nói như vậy dễ gây hiểu nhầm. XCopy và YCopy chỉ tồn tại trong hàm modify() và được giải phóng (hoặc có thể là giá trị rác) sau khi thoát khỏi modify().
Dễ thấy tiêu đề của bạn @blockC thể hiện sự nhầm lẫn đó.

Đúng ra phải ghi là Stack memory ngay trước khi kết thúc hàm modify()
Và vẽ thêm 1 hình Stack memory sau khi modify() thực thi.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?