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

... viết 23:47 ngày 30/09/2018
return a++;

return trước khi ++


test(a++);

=> a += 1;

Reoteu Ray viết 23:40 ngày 30/09/2018

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

... viết 23:45 ngày 30/09/2018

Tương đương

public static int test(int a) {
    return a;
    a = a + 1;
}
Reoteu Ray viết 23:45 ngày 30/09/2018

ý 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

... viết 23:35 ngày 30/09/2018

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.

test(a++);

truyền a đi rồi mới cộng giá trị.

Reoteu Ray viết 23:35 ngày 30/09/2018

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

Tao Không Ngu. viết 23:42 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

vũ xuân quân viết 23:43 ngày 30/09/2018

Để mình giải thích

int a = 10;

Đầu tiên là gán a = 10;
khi gọi function

int b = test(a++);

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

public static int test(int a) {

return a++;

}

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

Tom Nguyen viết 23:48 ngày 30/09/2018

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

Trần Huy viết 23:43 ngày 30/09/2018

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

Tương đương

public static int test(int a) {
return a;
a = a + 1;
}

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

Bài liên quan
0