Sự khác nhau giữa pass by value và pass by reference

5 Likes

Góp ý thêm: Trong java (hoặc javascript) vẫn là pass-by-value nhưng value ở đây là pointer (reference) tới cái object. Nếu bạn hiểu được khái niệm này thì sẽ tránh được rất nhiều lỗi ngớ ngẩn.

1 Like

hình ảnh minh họa sai bét nhè nếu xét trong java và nhiều ngôn ngữ có impl cùng tư tưởng.
cái pass by value chỉ đúng khi dùng với kiểu dữ liệu primitive còn với các object thì sai bét.
ông nào code java mà xem cái này nếu k biết thì vỡ mồm

2 Likes

Cái này hình như là minh họa cho mấy newbie C++ hiểu được sự khác nhau giữa truyền tham trị và truyền tham chiếu thôi anh :slight_smile:

nếu thế thì phải tag đúng ngôn ngữ, vì các ngôn ngữ hướng đối tượng hiện đại đều theo tư tưởng giống với java, nếu vẫn hiểu theo kiến thức cũ này thì sẽ dính nhiều lỗi đau đầu và k hiểu bản chất vấn đề

1 Like

Thật ra không sai đâu bạn, java là pass-by-value, primitive hay object cũng vậy thôi. Chẳng hạn trong Java Person p = new Person() thì biến p thật chất chỉ là 1 reference chứ ko phải object. Ở trong cái hình này, bạn nghĩ cái tách cafe như là 1 reference (hoặc pointer trong c) thì sẽ thấy nó vẫn là pass-by-value. Nhưng mà nếu tác giả vẽ như vậy mà không làm rõ thì sẽ rất dễ gây nhầm lẫn cho newbie.

1 Like

Trước thầy em dạy Java là pass by value mà, kể cả premitive hay object cũng vậy (với object thì nó pass vào cái pointer thôi)

mình đâu có nói java là pass by ref đâu bạn, nhưng đối với các object thì nó đối xử hơi khác so với kiểu primitive do nó pass reference by value, hơn nữa image của tác giả là hành động fill cup tức là thay đổi thuộc tính của đối tượng chứ không phải thay đổi giá trị của đối tượng, nên nếu xét trong java thì cả 2 object truyền vào bên trong và bên ngoài đều bị thay đổi thuộc tính. Đối với các bạn mới học sẽ có chút gì đó sượng sượng nên yêu cầu bạn đó phải làm rõ nếu k sẽ rất nguy hiểm

thầy bạn nói đúng rồi đó, nhưng đúng hơn là pass reference by value, object được truyền vào method chỉ là value của cái reference tới object thực tế ở trên heap nên về cơ bản sẽ vẫn trỏ tới cùng 1 object được truyền vào ở ngoài method, nên nếu object thay đổi thuộc tính thì sẽ phản ánh thay đổi ở cả trong và ngoài method. Mình nhấn mạnh cụm từ thuộc tính chứ k phải bản thân object đó

1 Like

Vâng, đúng như anh nói ạ :slight_smile:

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