Java pass by value hay pass by reference

Chắc hẳn những bạn đã học qua C, C++ sẽ có suy nghĩ như thế khi qua học java. Bên C,C++ thì có cả 2 kiểu trên pass by valuepass by reference, thực chất pass by reference trong C++ là khai báo 1 biến alias khác tên nhưng cùng địa chỉ với biến ban đầu.

Ví dụ:
hoanvi1(int &a,int &b) là pass by refererence còn hoanvi2(int *a,int *b) và hoanvi3(int a,int b) là pass by value.
Khi gọi hàm hoanvi1 thì biến trong hàm hoanvi1 và biến truyền vào là 1(cùng 1 địa chỉ)
Còn khi gọi hàm hoanvi2,hoanvi3 thì giá trị của biến thưc được gán cho biến hình thức, hoặc địa chỉ của con trỏ thực sự được copy và gán cho con trỏ hình thức

Xem thêm:  http://www.codeprovn.com/forums/viewtopic.php?f=17&t=1945

Còn bên JAVA:

Pass by value có thể hiểu là bạn truyền trị số(giá trị của biến) của 1 biến này vào 1 biến khác

Vd: int x=3;

int y = x; // giá trị của biến x(3) sẽ được copy và gán vào y

Đối với kiểu dữ liệu object thì sao.

Vd:  A obj_a = new A();

A obj_b = obj_a; //obj_a , obj_b sẽ cùng tham chiếu tới 1 đối tượng kiểu A

Khi đó mọi thay đổi tới đối tượng A từ obj_b hoặc obj_a đều gây ảnh hưởng đến đối tượng A là 1 thể hiện của class A.

 

Tại sao lại như thế. Khi bạn gán obj_b=obj_a, địa chỉ đối tượng mà obj_a tham chiếu tới sẽ được copy lại và gán cho obj_b.Sau phép gán này thì obj_b sẽ tham chiếu tới đối tượng A. Chú ý là chỉ copy địa chỉ chớ obj_a và obj_b không cùng 1 địa chỉ, do đó Reference to Object is pass by value

Java is pass-by-value.

For primitives, you pass a copy of the actual value.

For references to objects, you pass a copy of the reference (the remote control).

Tham khảo: http://www.javaranch.com/campfire/StoryPassBy.jsp

2 thoughts on “Java pass by value hay pass by reference”

  1. Thanks for every other excellent article. The plae else may just antone get thzt kind of info inn such
    a perfect means of writing? I have a presentation next week, and I am at the search for such information.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.