在Java中进行进制转换,既可以通过字面量直接书写不同进制的整数,也可以借助JDK自带的包装类方法实现相互转换。理解八进制前缀0和十六进制前缀0x的写法,是写出正确数值常量的基础。

一、Java中的进制字面量写法
Java语言规定整型字面量默认是十进制。如果要表示其他进制,需要遵循特定前缀规则:
- 二进制:以
0b或0B开头(Java 7及以上) - 八进制:以数字
0开头,例如010表示十进制的8 - 十六进制:以
0x或0X开头,例如0x10表示十进制的16
注意八进制前缀就是普通的数字0,后面紧跟合法的八进制数字(0到7)。如果写成 08 就会编译报错,因为8不属于八进制字符。
1. 八进制与十六进制字面量示例
public class LiteralDemo {
public static void main(String[] args) {
// 八进制前缀0,010等于十进制8
int octal = 010;
// 十六进制前缀0x,0x1F等于十进制31
int hex = 0x1F;
System.out.println("octal=" + octal); // 输出 8
System.out.println("hex=" + hex); // 输出 31
}
}
二、使用Integer类进行进制转换
除了字面量,Java的 Integer 类提供了多个静态方法,可以把十进制整数转成其他进制的字符串,也可以把带有前缀或不带前缀的字符串解析成整数。
1. 十进制转其他进制
public class ConvertOut {
public static void main(String[] args) {
int num = 100;
// 转二进制
String bin = Integer.toBinaryString(num);
// 转八进制
String oct = Integer.toOctalString(num);
// 转十六进制
String hex = Integer.toHexString(num);
System.out.println("bin=" + bin);
System.out.println("oct=" + oct);
System.out.println("hex=" + hex);
}
}
2. 其他进制字符串转十进制
使用 Integer.valueOf(String s, int radix) 或 Integer.parseInt(String s, int radix) 可以指定进制基数进行解析。对于带 0 或 0x 前缀的字符串,需要先用代码去掉前缀再传入对应基数。
public class ParseDemo {
public static void main(String[] args) {
// 解析八进制字符串,去掉前缀0
String octStr = "010";
int fromOct = Integer.valueOf(octStr, 8);
// 解析十六进制字符串,去掉前缀0x
String hexStr = "0x1F";
String pureHex = hexStr.replaceFirst("0x", "");
int fromHex = Integer.valueOf(pureHex, 16);
System.out.println("fromOct=" + fromOct);
System.out.println("fromHex=" + fromHex);
}
}
三、常见错误与注意事项
| 写法 | 含义 | 是否合法 |
|---|---|---|
| 010 | 八进制,等于十进制8 | 合法 |
| 08 | 想写八进制但包含数字8 | 不合法,编译错误 |
| 0xG | 十六进制出现非法字符G | 不合法,编译错误 |
在实际项目中,如果读取配置文件或网络数据中的数值字符串,务必明确其进制格式,避免把 012 误当作十进制十二处理。合理利用前缀和方法,就能在Java中安全高效地完成各种进制转换任务。