当值的类型不明确时,通过字面值常量(Literal)来让编译器准确地识别出其类型。
1 基本表示法
示例 | 输出结果(二进制形式) | 说明 |
---|---|---|
int i = 0xff | 11111111 | 16 进制小写形式 |
int i = 0XFF | 11111111 | 16 进制大写形式 |
int i = 0177 | 1111111 | 8 进制形式 |
char c = 0xffff | 1111111111111111 | char 类型 16 进制形式 |
byte b = 0x7f | 1111111 | byte 类型 16 进制形式 |
short s = 0x7fff | 111111111111111 | short 类型 16 进制形式 |
long l=300L | 100101100 | long 类型,不建议使用 l,因为容易与 1 相混淆。 |
- 以 16 为基数的十六进制表示法,适用于所有整型数据类型,带 0x 或 0X 前缀,后跟 0-9 或 a-f (大写或小写)。
- 如果在初始化某个类型的数值时,赋值超出其类型的数值范围,那么编译器就会报错。char、byte 和 short 类型的值,如果超过最大范围,编译器会提示我们需要声明强制转换:
- 以 8 为基数的八进制表示法,带 0 前缀,后跟 0-7。
2 下划线表示法
Java 7 + 可以在数字字面量表示法中包含下划线 _,这可以让数字表达的更清晰。
规则如下:
- 仅限单条下划线 ,不能多条相连。
- 数值开头和结尾不能出现下划线。
- F、D 和 L的前后不能出现下划线。
- 二进制前导 b 和 十六进制 x 前后不能出现下划线。
public class Underline {
public static void main(String[] args) {
double d = 234_293_239.293_239;
System.out.println(d);
int i = 0b1111_1010_1111_1010_1111_1010_1111;
System.out.println(Integer.toBinaryString(i));
System.out.printf("%x%n", i);
long l = 0xfa_fa_fa_f;
System.out.printf("%x%n", l);
}
}
注意: Java 中 System.out.printf() 或 System.out.format() 中可以使用 %n
实现忽略平台间差异的换行符。对于 System.out.println(),仍然必须使用 \n
。