Bisakah Anda menjelaskan kepada saya output dari kode Java ini?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
Outputnya 20 dalam kedua kasus
java
post-increment
pre-increment
Ankit Sachan
sumber
sumber
Jawaban:
Apakah ini membantu?
Poin utamanya adalah
++a
menaikkan nilai dan segera mengembalikannya.a++
juga menambah nilai (di latar belakang) tetapi mengembalikan nilai variabel yang tidak berubah - yang sepertinya akan dijalankan nanti.sumber
int a = 1; int b = a++; int c = ++b;
Berharap b menjadi 1 karena itu kenaikan pos.++a
kenaikan dan kemudian menggunakan variabel.a++
menggunakan dan kemudian menambah variabel.Jika Anda memiliki
dan kamu juga
codaddict menjelaskan cuplikan khusus Anda.
sumber
Dalam kedua kasus itu, pertama kali menghitung nilai, tetapi dalam kenaikan setelah itu memegang nilai lama dan setelah menghitung mengembalikannya
++ a
a ++
sumber
adalah
Bekerja : kenaikan a hingga 6 (nilai saat ini 6) + kenaikan a hingga 7 (nilai saat ini 7). Jumlahnya 13 sekarang tambahkan ke nilai saat ini dari a (= 7) dan kemudian tingkatkan a menjadi 8. Jumlahnya 20 dan nilai a setelah tugas selesai adalah 8.
adalah
Bekerja : Pada nilai awal a adalah 5. Gunakan dalam penambahan dan kemudian tingkatkan menjadi 6 (nilai saat ini 6). Tingkatkan a dari nilai saat ini 6 ke 7 untuk mendapatkan operan + lainnya. Jumlahnya 12 dan nilai a saat ini adalah 7. Kenaikan berikutnya a dari 7 menjadi 8 (nilai saat ini = 8) dan tambahkan ke jumlah sebelumnya 12 untuk mendapatkan 20.
sumber
++a
kenaikana
sebelum dievaluasi.a++
mengevaluasia
dan kemudian menambahkannya.Terkait dengan ekspresi Anda diberikan:
Tanda kurung yang saya gunakan di atas secara implisit digunakan oleh Java. Jika Anda melihat istilah dengan cara ini, Anda dapat dengan mudah melihat, bahwa keduanya sama dan bersifat komutatif.
sumber
Pada contoh di atas
sumber
++ a adalah operator kenaikan prefiks:
a ++ adalah operator kenaikan postfix:
Begitu ingat aturannya, ZE buat nih menghitung semuanya!
sumber
Menganggap itu yang Anda maksud
Ini mengevaluasi untuk:
jadi i adalah 6 + 7 + 7 = 20 dan 20 dicetak.
jadi i adalah 5 + 7 + 8 = 20 dan 20 dicetak lagi.
dan setelah semua sisi kanan dievaluasi (termasuk pengaturan a ke 8) LALU a diatur ke 6 + 7 + 7 = 20 dan 20 dicetak sebagai waktu terakhir.
sumber
when
a
adalah 5, kemudiana++
memberikan 5 untuk ekspresi dan kenaikana
setelahnya, sedangkan++a
kenaikana
sebelum meneruskan angka ke ekspresi (yang memberikana
6 untuk ekspresi dalam kasus ini).Jadi Anda menghitung
sumber
Namun saya percaya jika Anda menggabungkan semua pernyataan Anda dan menjalankannya di Java 8.1, Anda akan mendapatkan jawaban yang berbeda, setidaknya itulah yang dikatakan pengalaman saya.
Kode akan bekerja seperti ini:
sumber
Pre-increment berarti variabel tersebut bertambah SEBELUM dievaluasi dalam ekspresi. Penambahan pasca berarti bahwa variabel bertambah SETELAH dievaluasi untuk digunakan dalam ekspresi.
Oleh karena itu, perhatikan baik-baik dan Anda akan melihat bahwa ketiga tugas secara hitung setara.
sumber
pre-increment dan post increment sama jika tidak dalam ekspresi
sumber
adalah
Bekerja: kenaikan pra / pasca memiliki asosiasi "kanan ke kiri", dan pra didahulukan dari pos, jadi pertama-tama kenaikan pra akan diselesaikan sebagai
(++a + ++a) => 7 + 6
. kemudiana=7
disediakan untuk kenaikan posting =>7 + 6 + 7 =20
dana =8
.adalah
Bekerja: kenaikan pra / posting memiliki asosiatif "kanan ke kiri", dan pra memiliki prioritas di atas posting, jadi pertama-tama kenaikan pra akan diselesaikan sebagai
(++a + ++a) => 7 + 6
. Kemudiana=7
disediakan untuk kenaikan posting =>7 + 7 + 6 =20
dana =8
.sumber
Saya percaya Anda menjalankan semua pernyataan ini secara berbeda
mengeksekusi bersama-sama akan menghasilkan => 38, 29
sumber