Rumah  >  Artikel  >  Java  >  Mengapakah `j = j ` Menghasilkan `j` Baki 0 ​​di Jawa?

Mengapakah `j = j ` Menghasilkan `j` Baki 0 ​​di Jawa?

DDD
DDDasal
2024-10-26 23:43:30586semak imbas

Why Does `j = j  ` Result in `j` Remaining 0 in Java?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn