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

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

Linda Hamilton
Lepaskan: 2024-10-26 21:35:03
asal
602 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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++;
Salin selepas log masuk

Adalah bersamaan dengan:

temp = rhs;
rhs = rhs + 1;
lhs = temp;
Salin selepas log masuk

Menggunakan Peraturan

Menggunakan peraturan ini pada a = b , ia menjadi:

temp = b;
b = b + 1;
a = temp;
Salin selepas log masuk

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;
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan