Apa hasil dari menjalankan kode berikut?
Paket com.test; Public Class Inc {public static void main (string [] args) {inc inc = new inc (); int i = 0; Inc.Fermin (I); i = i ++; System.out.println (i); } membatalkan fermin (int i) {i ++; }}Hasilnya adalah: 0
Hasil menjalankan kode serupa di atas dalam C/C ++ adalah: 1. Mengapa ini?
Ini karena Java menggunakan mekanisme variabel cache menengah:
i = i ++; setara dengan:
temp = i; (Saya di sisi kanan tanda yang sama)
i = i+1; (Saya di sebelah kanan tanda yang sama)
i = temp; (Saya di sisi kiri dari tanda yang sama)
Dan i = ++ i; setara dengan:
i = i+1;
temp = i;
i = temp;
Penjelasan terperinci:
Ada dua area penyimpanan di JVM, satu adalah area penyimpanan sementara (tumpukan, yang disebut tumpukan di bawah), dan yang lainnya adalah area variabel.
JVM akan menjalankan pernyataan ini seperti ini:
Langkah 1 JVM Salin nilai i (nilainya adalah 0) ke area variabel sementara (temp = 0).
Langkah 2 Tambahkan nilai area variabel I ke 1, dan nilai i adalah 1.
Langkah 3 Mengembalikan nilai Area Variabel Sementara (TEMP). Perhatikan bahwa nilai ini adalah 0 dan belum dimodifikasi.
Langkah 4 Nilai pengembalian ditugaskan ke I di area variabel, dan nilai I diatur ulang ke 0.
Tidak ada variabel sementara lain atau ruang sementara untuk menghemat I dalam C/C ++. Semua operasi diselesaikan dalam satu ruang memori, jadi itu adalah 1 dalam C/C ++.
Pengantar di atas untuk masalah penangkapan diri di Java adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.