Rumah  >  Artikel  >  Java  >  Mengapakah `j = j ` Menghasilkan `j` Kekal pada 0 di Jawa?

Mengapakah `j = j ` Menghasilkan `j` Kekal pada 0 di Jawa?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 21:35:03430semak imbas

Why Does `j = j  ` Result in `j` Staying at 0 in Java?

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!

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