Rumah >Java >javaTutorial >Mengapakah `0123` Mencetak `83` dalam Java, Tetapi `123` Mencetak `123`?
Gelagat Membingungkan Integer Literal dengan Sifar Utama
Di Java, literal integer dengan sifar pendahuluan mempamerkan tingkah laku yang tidak dijangka, seperti yang ditunjukkan oleh kod berikut coretan:
System.out.println(0123); // Prints 83 System.out.println(123); // Prints 123
Sebab Perbezaan
Kunci untuk memahami perbezaan ini terletak pada perwakilan perlapanan. Sifar pendahuluan dalam literal integer menandakan bahawa literal dinyatakan dalam asas 8 (oktal). Dalam perlapanan, setiap digit mewakili kuasa 8, bermula dari 0.
Oleh itu, 0123 tersurat boleh ditukar kepada perpuluhan seperti berikut:
(0 * 8³) + (1 * 8²) + (2 * 8) + (3) = 83
Sebaliknya, 123 tersurat ialah ditafsirkan dalam perpuluhan, di mana setiap digit mewakili kuasa 10. Oleh itu, ia menilai kepada 123.
Heksadesimal Literal
Selain perlapanan, Java juga menyokong heksadesimal (asas 16) literal menggunakan awalan 0x. Sebagai contoh, 0xFF mewakili nombor perenambelasan 255, yang bersamaan dengan 11111111 dalam perduaan.
Pengesyoran
Untuk mengelakkan kekeliruan, adalah dinasihatkan untuk meninggalkan sifar pendahuluan daripada integer literal melainkan perwakilan oktal dimaksudkan secara eksplisit. Jika tidak, literal akan disalahtafsirkan sebagai perlapanan, membawa kepada hasil yang tidak dijangka.
Atas ialah kandungan terperinci Mengapakah `0123` Mencetak `83` dalam Java, Tetapi `123` Mencetak `123`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!