Tại sao kết quả của code này ra 5 mà không phải là 6?

java

(Lính Mới) #1

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ố 4x=4*4; phải bằng 16 ???
Giải thích giúp em với ạ


(Nguyễn Đình Anh) #2

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ó.


(Trần Hoàn) #3

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.


(Lính Mới) #4

Cảm ơn mọi người đã quan tâm đến câu hỏi. Nhưng thật ra :joy: em vẫn chưa hiểu, e đang bắt đầu học java thôi


(Trương Tấn Phát) #5

Tham trị

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.


(Văn Dương) #6

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.


(vanduong) #7

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);


(TNM) #8

Cái này bạn tìm hiểu về tham chiếutham trị là sẽ hiểu được.


(Summoner's Rift) #9

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


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