30/09/2018, 21:34
Chạy thử và giải thích vì sao nó lại như vậy
public class JavaApplication6 {
public static int test(int a) {
return a++;
}
public static void main(String[] args) {
int a = 10;
int b = test(a++);
System.out.println( a);
System.out.println(b);
}
}
kết quả a=11 , b =10 mình không hiểu vì sao lại như vậy
Bài liên quan
return trước khi ++
=> a += 1;
vậy là tai chỗ return , nó thực hiện lệnh return luôn mà không tăng a lên , vậy ++ tại đó vô giá trị à
còn tại chỗ gọi method test vì sao nó lại truyền a qua mà không truyền a++ qua
Tương đương
ý mình là cái đoạn gọi đến method test tai hàm main ấy sao nó không tăng a lên rồi mới truyền đi , mà để nguyên như vậy rồi truyền
a ở lời gọi hàm là đối số, bạn tìm hiểu về truyền đối số theo giá trị là đc.
truyền a đi rồi mới cộng giá trị.
hix rõ ràng là viết cái a++ tại danh sách đối số mà sao nó lại chỉ thực hiện lệnh truyền a đi , rồi sau khi thực hiện xong method test() nó mới tăng đối số a lên 1 đơn vị , bạn có thể giải thích cơ chế làm việc của nó tại điểm này được không
This post was flagged by the community and is temporarily hidden.
Để mình giải thích
Đầu tiên là gán a = 10;
khi gọi function
Do toán tử (++) này được thực hiện sau khi gọi hàm nên giá trị của a khi truyền vào hàm test có giá trị là 10 --> int b = test (10);
Tương tự như trên thì việc thực return trước nên không thực hiện phép toán (++) nên giá trị trả về cho b sẽ là 10.
Sau khi thực hiện xong function test(int a) thì sẽ thực hiện phép toán (++) khi đó a sẽ tăng lên 1 giá trị nên a = 11.
a++ là gán a trước, tăng a sau
Đầu tiên nó gán b = a cái đã, lúc này giá trị a = 10.
Sau đó nó mới tăng a lên, nên a = 11
1 ví dụ hay về toán tử ++ . Còn về hoạt động thì các bạn trên đã giải thích rất rõ rồi
cái này nó liên quan đến stack.
Nhưng hiểu đơn giản là toán tử ++ sẽ được thực hiện cuối cùng trong 1 dòng lệnh, bất kể vị trí.
return a++;
trường hợp trên ở trong hàm nó không thực hiện a++ cũng dễ hiểu mà.
Bác này nói rồi này.
Lệnh không nhất thiết phải được thực hiện trong 1 ct. Đó gọi là “flow”.