Em không hiểu tại sao kết quả ra 5
Theo e thì phải ra 6 !
Cái này cũng tương tự, truyền vào phương thức
square
số 4 mà x=4*4;
phải bằng 16 ???Giải thích giúp em với ạ
Em không hiểu tại sao kết quả ra 5
Theo e thì phải ra 6 !
square
số 4 mà x=4*4;
phải bằng 16 ???Kiểu biến int
là kiểu biến tham trị, nên khi truyền vào hàm thì sẽ chỉ nhận giá trị chứ không nhận tham chiếu.
==> Bạn có thay đổi giá trị của tham trị truyền vào thì vẫn không thay đổi giá trị gốc của nó.
Trong C++ có toán tử &
, trong C# có toán tử ref
. Còn trong Java thì không có kiểu đó.
Để code sáng sủa, bạn không nên code là “addOne(X);” mà nên code là “X = addOne(X);”
Việc code "doSomething(X);` chỉ dùng để thay đổi 1 thuộc tính của object X, không phải để thay thế biến X thành object khác.
Cảm ơn mọi người đã quan tâm đến câu hỏi. Nhưng thật ra em vẫn chưa hiểu, e đang bắt đầu học java thôi
Sao chép giá trị đó ra một ô nhớ khác rồi mới dùng giá trị vừa sao chép làm tham số. Nhưng chỉ với kiểu nguyên thủy (primitive type).
Như này:
//...
public static void main(String... args){
int x = 99;
// gọi
// addOne(x);
// tương đương với:
int temp = x;
addOne(temp);
System.out.println(x);
}
public static void addOne(int n){
n = n + 1;
}
Tượng trưng
cho bạn hiểu là nó không truyền ô nhớ chứa giá trị gốc
vào phương thức được gọi. Nên mọi thay đổi của tham số không ảnh hưởng đến giá trị gốc.
Khác với C/C++ và C# có thể lựa chọn truyền tham trị hoặc tham chiếu.
Em hiểu đơn giản là thằng x được copy ra thằng x’ gán vào num. Nên làm gì với thằng num cũng không ảnh hưởng x.
Bạn muốn tăng x, nhưng mà hàm addOneTo kia tăng num chứ đâu phải x. Nên cho addOneTo return num, rồi bên trên dưới phần khai báo biến x thì gán x = addOneTo(x);
Cái này bạn tìm hiểu về tham chiếu và tham trị là sẽ hiểu được.
Thế mới nói pointer với tham chiếu bên C, C++ giúp mình hiểu mấy cái này easy thế nào không phải ngẫu nhiên c,c++ ví như là mẹ của các ngôn ngữ lập trình hiện đại ngày này