11 June 2017

Pass-by-reference or Pass-by-value: Cách Java truyền đối số (Tham chiếu hay Giá trị )


Truyền đối số tham chiếu Pass-by-reference
Test.java
Java Core 2017
package com.demo;

public class Test {

    public static void main(String[] args) {
        Mytest mytest = new Mytest();
        mytest.a = 1;
        System.out.println("Test's x (in main) is: " + mytest.a);
        doSomething(mytest);
        System.out.println("Test's x (in main) is: " + mytest.a);
    }

    public static void doSomething(Mytest mytest) {
        mytest = new Mytest(2); //Pass by reference
        System.out.println("Test's x (in doSomething) is: " + mytest.a);
    }

    public static class Mytest {
        int a;
        public Mytest(int a) {
            this.a = a;
        }
        public Mytest() {
        }
    }
}
Output:
Test's x (in main) is: 1
Test's x (in doSomething) is: 2
Test's x (in main) is: 1
Truyền đối số giá trị Pass-by-value
Test.java
Java Core 2017
package com.demo;

public class Test {

    public static void main(String[] args) {
        Mytest mytest = new Mytest();
        mytest.a = 1;
        System.out.println("Test's x (in main) is: " + mytest.a);
        doSomething(mytest);
        System.out.println("Test's x (in main) is: " + mytest.a);
    }

    public static void doSomething(Mytest mytest) {
        mytest.a = 2; //Pass by value
        System.out.println("Test's x (in doSomething) is: " + mytest.a);
    }

    public static class Mytest {
        int a;
    }
}
Output:
Test's x (in main) is: 1
Test's x (in doSomething) is: 2
Test's x (in main) is: 2
Test.java
Java Core 2017
package com.demo;

public class Test {

    public static void main(String[] args) {
        int a = 1;
        System.out.println("a (in main) is: " + a);
        doSomething(a);
        System.out.println("a (in main) is: " + a);
    }

    public static void doSomething(int a) {
        a = 2; //Pass by value (VD này cần xem Immutable String là gì)
        System.out.println("a (in doSomething) is: " + a);
    }
}
Output:
a (in main) is: 1
a (in doSomething) is: 2
a (in main) is: 1
[1]. Khi khởi tạo đối tượng Mytest, biến mytest sẽ chứa địa chỉ của vùng nhớ đối tượng Mytest, đối tượng Mytest được lưu ở Heap. Và giá trị của biến mytest  được lưu ở Stack
[2]. Trong JAVA, có 2 kiểu biến: biến tham trị và tham chiếu.
Biến kiểu tham trị bao gồm các kiểu nguyên thủy của JAVA như: int, long, double…
Biến kiểu tham chiếu bao gồm: String, Integer, Array, kiểu đối tượng…

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang