01/10/2018, 17:31
Tại sao data là kiểu dữ liệu nguyên thủy nên khi truyền vào phương thức sẽ là kiểu pass by value nhưng sao kết quả trả về lại như kiểu pass by reference
public class Operation {
int data = 50;
void change(int j) {
data = j + 100;
System.out.println(data);
}
public static void main(String []args) {
Operation op = new Operation();
System.out.println("Trước khi thay đổi: " + op.data);
op.change(500);
System.out.println("Sau khi thay đổi: " + op.data);
}
}
kết quả trả lại như thế này ạ
Trước khi thay đổi: 50
600
Sau khi thay đổi: 600
đáng nhẽ phải là Trước khi thay đổi: 50
600
Sau khi thay đổi: 50 chứ ạ ?
Bài liên quan
data
là một biến toàn cục nên phải là Pass by referenceTham trị hay tham biến là áp lên số 500 chứ
data
đâu có bị chi phối đâu. Mà 500 thì chắc chắn là tham trị rồi.ở Viettus có cái ví dụ này .e vất vào trong Eclipse thìcũng cho ra kết quả như trong ảnh , nhưng , data trong trường hợp này cũng là biến toàn cục nhưng vẫn là Pass by Value mà ạ
e thấy ví dụ trong ảnh ( của Viettus ) nó không chính xác . ở method change() ; data kia chỉ là data cục bộ, nó chả tác động gì tới data toàn cục ở int data=50; cả . nếu sửa thành this.data=data+100; thì kết quả sau khi thay đổi sẽ là 600,
Để như kết quả bạn mong muốn thì:
Bạn đang suy nghĩ sai rồi nha bạn.
Code của bạn cũng hoàn toàn không liên quan gì đến so sánh tham trị tham chiếu gì cả nha bạn.
data
ở đây được hiểu làthuộc tính data
của object,và
data
= j + 100, vậy nên bạn truyền j = 500 thìthuộc tính data trong object
trở thành 600 là chuẩn rồi! OK nhabạn truyền tham số
data
vào, nhưng màtham số data
này lại trùng tên vớithuộc tính data
của object, nên khi bạn gándata
= …, trình biên dịch không biết bạn muốn nói đếndata
nào??? Và nó sẽ ưu tiên nghĩ rằngdata bạn nhắc đến
là tham số. Tức là bạn truyềnbiến
= 500 vào, xong chobiến
= 500 + 100, lúc đóbiến
= 600,thuộc tính data trong object
không có gì thay đổi nên nó vẫn như cũ là 50. Vậy nên bạn in ra 50 là đúng rồi hen (đoạn code thứ 2 này không có ý nghĩa gì, có thể do người viết tut cho bạn viết nhầm)Bạn phải chỉ rõ cho trình biên dịch biến nào là thuộc tính của object (bằng cách dùng this), biến nào là tham số bạn truyền vô như code dưới đây: