Rumah >Java >javaTutorial >Mengapakah `j = j ` Menghasilkan `j` Baki 0 di Jawa?
Operator Penambahan Pos dalam Java
Di Java, pengendali kenaikan pasca ( ) menambah nilai pembolehubah sebanyak satu selepas penilaiannya. Tingkah laku ini boleh membawa kepada hasil yang tidak dijangka, seperti yang ditunjukkan oleh kod yang disediakan dalam "Java Puzzlers":
<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); System.out.println(b); // prints 1 } }</code>
Kekeliruan timbul apabila memeriksa pernyataan j = j . Menurut Spesifikasi Bahasa Java (JLS), pernyataan ini bersamaan dengan:
<code class="java">temp = j; j = j + 1; j = temp;</code>
Walau bagaimanapun, penjelasan ini bercanggah dengan keputusan a = b , yang memberikan 0 kepada a dan menambah b kepada 1. Untuk menyelesaikan percanggahan ini, adalah penting untuk ambil perhatian bahawa a = b dinilai seperti berikut:
<code class="java">temp = b; b = b + 1; a = temp;</code>
Ini bermakna tugasan kenaikan jawatan dalam borang lhs = rhs adalah bersamaan dengan:
<code class="java">temp = rhs; rhs = rhs + 1; lhs = temp;</code>
Menggunakan peraturan ini pada kedua-dua j = j dan a = b menjelaskan keputusan yang diperhatikan dalam kod. j = j secara berkesan memberikan nilai j (0) kepada temp, menambah j kepada 1, dan kemudian memberikan temp (0) kembali kepada j. Ini menerangkan sebab j mencetak 0 walaupun terdapat pengendali kenaikan.
Atas ialah kandungan terperinci Mengapakah `j = j ` Menghasilkan `j` Baki 0 di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!