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
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
Jawaban:
Apakah ini membantu?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
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.
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
a = 1;
dan kamu juga
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
codaddict menjelaskan cuplikan khusus Anda.
Dalam kedua kasus itu, pertama kali menghitung nilai, tetapi dalam kenaikan setelah itu memegang nilai lama dan setelah menghitung mengembalikannya
++ a
a ++
i = ++a + ++a + a++;
adalah
i = 6 + 7 + 7
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.
i = a++ + ++a + ++a;
adalah
i = 5 + 7 + 8
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.
++a
kenaikan a
sebelum dievaluasi.
a++
mengevaluasi a
dan kemudian menambahkannya.
Terkait dengan ekspresi Anda diberikan:
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
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.
Menganggap itu yang Anda maksud
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
Ini mengevaluasi untuk:
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
jadi i adalah 6 + 7 + 7 = 20 dan 20 dicetak.
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
jadi i adalah 5 + 7 + 8 = 20 dan 20 dicetak lagi.
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
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.
when a
adalah 5, kemudian a++
memberikan 5 untuk ekspresi dan kenaikan a
setelahnya, sedangkan ++a
kenaikan a
sebelum meneruskan angka ke ekspresi (yang memberikan a
6 untuk ekspresi dalam kasus ini).
Jadi Anda menghitung
i = 6 + 7 + 7
i = 5 + 7 + 8
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:
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
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.
pre-increment dan post increment sama jika tidak dalam ekspresi
int j =0;
int r=0
for(int v = 0; v<10; ++v) {
++r;
j++;
System.out.println(j+" "+r);
}
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
a=5; i=++a + ++a + a++;
adalah
i = 7 + 6 + 7
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
. kemudian a=7
disediakan untuk kenaikan posting => 7 + 6 + 7 =20
dan a =8
.
a=5; i=a++ + ++a + ++a;
adalah
i=7 + 7 + 6
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
. Kemudian a=7
disediakan untuk kenaikan posting => 7 + 7 + 6 =20
dan a =8
.
Saya percaya Anda menjalankan semua pernyataan ini secara berbeda
mengeksekusi bersama-sama akan menghasilkan => 38, 29
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)