Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Tham biến array trong Java

    Mình đọc sách thì thấy viết truyền tham trị áp dụng với trường hợp tham số là kiểu dữ liệu nguyên thủy. Còn truyền tham biến áp dụng cho các trường hợp tham số là kiểu tham chiếu: Array, Object. Như trường hợp dưới đây mình đổi giá trị của 2 mảng int.

    Mã:
    public class ArraySwap {
    
        public static void main(String[] args) {
            int[] a = {1, 2, 3, 4, 5};
            int[] b = {6, 7, 8, 9, 0};
    
            swap1(a, b);
    
            for (int index = 0; index < a.length; index++) {
                System.out.print(a[index]);
            }
    
            System.out.println();
    
            for (int index = 0; index < b.length; index++) {
                System.out.print(b[index]);
            }
    
            System.out.println();
        }
    
        public static void swap(int[] array1, int[] array2) {
            int[] temp = array1;
    
            array1 = array2;
    
            array2 = temp;
        }
    }
    Nếu code như trên thì 2 mảng tham biến truyền vào sẽ không bị thay đổi giá trị. Còn nếu code method swap như sau thì nó sẽ bị thay đổi:

    Mã:
    public static void swap1(int[] array1, int[] array2) {
            int[] temp = array1;
    
            array1 = array2;
    
            array2 = temp;
            int tg;
            for (int i = 0; i < array1.length; i++) {
                tg = array1[i];
                array1[i] = array2[i];
                array2[i] = tg;
            }
        }
    int[] temp = array1; Nghĩa là mình khởi tạo 1 mảng temp kiểu int và tham chiếu vào mảng int trong heap mà thằng array1 tham chiếu đến. Như vậy tại sao giá trị lại không thay đổi, còn chạy for đổi từng phần tử thì nó lại thay đổi. Bạn nào biết vào giải thích hộ với?

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong Java:
    - Tham trị là giá trị được chép ra một ô nhớ mới để làm tham số cho phương thức.
    - Tham chiếu là con trỏ của đối tượng được chép ra một ô nhớ mới làm tham số của phương thức.

    Khi đó nếu thay đổi giá trị con trỏ thì chẳng làm thay đổi phần tử của mảng ban đầu. Nhưng nếu thay các giá trị mà con trỏ chỉ đến thì sẽ làm thay đổi giá trị ban đầu. Đó là lý do bạn gán mảng này bằng mảng kia nó không làm thay đổi mảng ban đầu. Nhưng khi thay đổi từng giá trị nó trỏ đến thì làm thay đổi.

  3. #3
    Ngày tham gia
    Sep 2015
    Đang ở
    Số 60 Thái Hà, Đống Đa, Hà Nội
    Bài viết
    0
    Trích dẫn Gửi bởi SITUVNX
    Trong Java:
    - Tham trị là giá trị được chép ra một ô nhớ mới để làm tham số cho phương thức.
    - Tham chiếu là con trỏ của đối tượng được chép ra một ô nhớ mới làm tham số của phương thức.

    Khi đó nếu thay đổi giá trị con trỏ thì chẳng làm thay đổi phần tử của mảng ban đầu. Nhưng nếu thay các giá trị mà con trỏ chỉ đến thì sẽ làm thay đổi giá trị ban đầu. Đó là lý do bạn gán mảng này bằng mảng kia nó không làm thay đổi mảng ban đầu. Nhưng khi thay đổi từng giá trị nó trỏ đến thì làm thay đổi.
    Thanks bạn. Mình hiểu rồi! Bạn cho mình hỏi thêm trường hợp của String là truyền theo tham biến hay tham trị vậy?

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •