Tham trị (pass-by-value) và tham chiếu (pass-by-reference) trong Java




Chào bạn đến với phanlamcoder.blogspot.com!

Ở bài viết này chúng ta sẽ tìm hiểu về Tham trị (pass-by-value) và tham chiếu (pass-by-reference) trong Java


 pass by value java


Khi thao tác vi các hàm trong Java, vi nhng người mi bt đu s thường lúng túng vi vic truyn tham s vào cho các hàm. Ti sao mt s trường hp khi truyn tham s vào cho hàm xong khi thoát ra khi hàm giá tr ca tham s lúc thì b thay đi theo logic ca hàm, lúc thì không thay đi gì? Vn đ đây chính là s khác nhau ca các loi tham s được truyn vào hàm mà đôi lúc người lp trình không đ ý đến. Các loi tham s này được chia làm 2 kiu là truyn giá tr và truyn tham chiếu.
·         Truyn tham tr là gì? Truyn tham chiếu là gì?
Mình tm áp dng mt cách nh có v hơi thô thin ca mình đ tránh nhm ln trong trường hp này: tham tr là cùng giá tr, tham chiếu là cùng chiếu đến mt vùng nh.

1.      Truyn tham tr

 là truyn / copy giá tr ca mt biến (A) vào mt biến khác (B) đ s dng trong phm vi ca mt hàm. đây mình nói đến t copy dùng đ nhn mnh giá tr được truyn vào là mt bn sao và lúc này (A) và (B) hoàn toàn đc lp nhau, vic dùng (B) đ x lý trong hàm hoàn toàn không nh hưởng gì đến biến ban đu (A).

2.     Truyn tham chiếu

 là làm biến (B) thành mt alias (bí danh) ca (A), lúc này (A) gn như là (B) và (B) gn như là (A) vì c 2 đu tham chiếu đến cùng mt đi tượng, mi thay đi trên (B) thc tế cũng là thay đi trên (A)  (vic ti sao li nói (A) va (B) lúc này gn như nhau s được gii thích rõ hơn phn dưới). T đó, sau khi thoát ra khi hàm, d liu trên vùng nh được (A) tham chiếu ti s b thay đi theo các thao tác mà ta đã dùng đ thay đi d liu trên vùng nh được (B) tham chiếu ti.
·         Làm sao xác đnh đâu là tham chiếu, đâu là tham tr trong Java?
Sau mt hi ging gii dài dòng trên, có th bn s nói mình khùng khi mình phát biu tiếp câu này:
Java ch truyn tham tr, không truyn tham chiếu.
Thêm mt câu khng đnh li:
Phát biu trên luôn đúng và không có ngoi l!
Mình không khùng đâu, cái này tng là lm tưởng ca mình trong mt thi gian dài và lm tưởng này nó ph biến đến mc có th xếp vào hàng nhng lm tưởng ph biến nht đi vi các lp trình viên Java. Lm tưởng đó thường được phát biu như sau:Kiu d liu cơ s được truyn theo tham tr, kiu object được truyn theo tham chiếu.
Gii thích tiếp Java ch truyn tham tr, vy nó truyn tham tr như thế nào trong trường hp vi kiu d liu cơ s và kiu object.
1.      Kiu d liu cơ s: đi vi kiu d liu cơ s, Java đơn gin là copy giá tr ca biến đ gán vào tham s. Và như đã nói trên, lúc này biến và tham s s dng trong hàm là riêng bit, khi thoát ra khi hàm biến không b thay đi giá tr.
2.     Kiu object: khi truyn mt biến có kiu object vào mt hàm thì lúc đó có nghĩa ta đã truyn giá tr ca biến đó đ s dng trong hàm, ch không phi truyn đi tượng được biến đó tham chiếu ti. Vy giá tr ca mt biến kiu object là gì??? Nói có v hơi l nhưng có th nói giá tr ca biến kiu object là đa ch ca object mà biến đó tham chiếu đến đến. Cho nên lúc này vic thay đi giá tr ca biến kiu object này bng cách gán cho mt biến kiu object khác thì object được tham chiếu đến lúc đu không b nh hưởng, ch khi s dng các method ca chính các object được tham chiếu này thì d liu ca object mi được thay đi sau khi ra khi hàm.
 Chúc các bạn học tốt!
Góp ý tại mục bình luận bên dưới 💓