首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 八進位字面值陷阱:為什麼 System.out.println(012) 輸出 10?

     編輯:程式設計疑難解答

現象重現

System.out.println(012); // 輸出 10
System.out.println(0x12); // 輸出 18

語言規範解析

  • 以 0 開頭的整數字面值視為八進位(Octal)。
  • 以 0x 或 0X 開頭視為十六進位(Hexadecimal)。
  • 無前綴預設為十進位。

012 八進位 = 1×8¹ + 2×8⁰ = 8 + 2 = 10(十進位)。println 預設以十進位輸出,故顯示 10。

常見坑點與避坑指南

  1. 誤以為補零對齊:寫 int month = 08; 會編譯錯誤(八進位無數字 8),正確寫法 int month = 8;。
  2. 檔案權限模式:chmod 0755 在 Java 中需寫 0755(八進位)或 0o755(Java 8+ 支援 0o 前綴)。
  3. 字串格式化:String.format("%o", 10) 輸出 12(八進位字串)。

補充:Java 7+ 二進位字面值

int bits = 0b1010; // 十進位 10
System.out.println(bits); // 輸出 10

統一使用 0b(二進位)、0(八進位)、0x(十六進位)前綴,避免隱性轉換錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved