Mempersiapkan ujian Oracle Certified Associate Java SE 8 Programmer 1, saya menemukan paragraf berikut tentang ekspresi terner di Panduan Studi resmi:
Evaluasi Ekspresi Ternary
Pada Java 7, hanya satu ekspresi kanan dari operator terner yang akan dievaluasi saat runtime. Dengan cara yang mirip dengan operator hubung singkat, jika salah satu dari dua ekspresi tangan kanan di operator terner melakukan efek samping, maka itu tidak dapat diterapkan pada waktu proses. Mari kita ilustrasikan prinsip ini dengan contoh berikut: [...]
Dikatakan bahwa hanya satu dari dua ekspresi yang dievaluasi, didemonstrasikan dengan contoh berikut:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Di sini, hanya y
kenaikan, tetapi z
tidak, seperti yang Anda harapkan.
Apa yang saya temukan adalah awal dari paragraf (ditandai dengan warna kuning) di mana dikatakan "As of Java 7, ...". Saya menguji kode yang sama dengan Java 1.6 dan saya tidak dapat menemukan perbedaan dalam perilakunya. Saya berharap Java 1.6 mengevaluasi kedua ekspresi hanya dari informasi yang diberikan dalam paragraf. Adakah yang tahu apa yang ingin mereka katakan dengan "As of Java 7, ..."?
Sunting: Untuk menghindari kebingungan: Itu intinya pada pertanyaan, Karena mereka menulis 'Pada Java 7', apakah ada sesuatu yang berubah tentang operator terner, ketika beralih dari Java 6 ke Java 7?
sumber
Jawaban:
Saya salah satu penulis buku ini. Meskipun saya tidak menulis kalimat tersebut, saya setuju bahwa maksudnya adalah "ini telah diuji pada Java 7". Saya akan membuat catatan untuk menghapusnya jika kita menulis edisi lain.
Untuk memperjelas, operator terner telah berperilaku dengan cara yang sama di Java 8, 7, 6, dll. Dan saya akan sangat terkejut jika berubah di masa mendatang.
sumber
Dari Java 6 JLS :
Kata-kata serupa juga muncul di edisi JLS sejak 1.0 . Perilaku tidak berubah di Java 7; panduan belajarnya kurang bagus.
sumber