Operator Peningkatan Pasca di Java
Coretan kod berikut daripada "Java Puzzlers" Joshua Bloch nampaknya membingungkan pada pandangan pertama:
<code class="java">public class Test22 { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); // prints 0 int a = 0, b = 0; a = b++; System.out.println(a); // prints 0 System.out.println(b); // prints 1 } }</code>
Kekeliruan Terhadap Kenaikan Pos
Bahagian yang mengelirukan ialah tingkah laku j = j , yang mengakibatkan j kekal pada 0. Menurut penulis, ungkapan ini serupa :
<code class="java">temp = j; j = j + 1; j = temp;</code>
Walau bagaimanapun, dalam kes a = b , b sememangnya menjadi 1, yang nampaknya tidak konsisten.
Memahami Perbezaan
Untuk menyelesaikan kekeliruan ini, kita perlu memahami peraturan untuk pengendali kenaikan postfix ( ):
lhs = rhs++;
Adalah bersamaan dengan:
temp = rhs; rhs = rhs + 1; lhs = temp;
Menggunakan Peraturan
Menggunakan peraturan ini pada a = b , ia menjadi:
temp = b; b = b + 1; a = temp;
Oleh itu, a mendapat nilai asal b (iaitu 0), dan b kemudiannya dinaikkan kepada 1.
Dalam Kes j = j
Begitu juga, menggunakan peraturan untuk j = j menghasilkan:
temp = j; j = j + 1; j = temp;
Memandangkan suhu adalah sama dengan yang asal nilai j (iaitu 0), j ditambah kepada 1 tetapi kemudian segera ditimpa dengan nilai asal (0), menyebabkan j kekal pada 0.
Kesimpulan
Kunci untuk memahami gelagat pengendali kenaikan pasca ialah mengingati peraturan bahawa lhs = rhs ialah proses dua langkah: pertama, nilai semasa rhs ditetapkan kepada temp, kemudian rhs dinaikkan, dan akhirnya temp ditetapkan kepada lhs.
Atas ialah kandungan terperinci Mengapakah `j = j ` Menghasilkan `j` Kekal pada 0 di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!