ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## [字面值常量](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e5%ad%97%e9%9d%a2%e5%80%bc%e5%b8%b8%e9%87%8f) 通常,当我们向程序中插入一个字面值常量(**Literal**)时,编译器会确切地识别它的类型。当类型不明确时,必须辅以字面值常量关联来帮助编译器识别。代码示例: ~~~ // operators/Literals.java public class Literals { public static void main(String[] args) { int i1 = 0x2f; // 16进制 (小写) System.out.println( "i1: " + Integer.toBinaryString(i1)); int i2 = 0X2F; // 16进制 (大写) System.out.println( "i2: " + Integer.toBinaryString(i2)); int i3 = 0177; // 8进制 (前导0) System.out.println( "i3: " + Integer.toBinaryString(i3)); char c = 0xffff; // 最大 char 型16进制值 System.out.println( "c: " + Integer.toBinaryString(c)); byte b = 0x7f; // 最大 byte 型16进制值 01111111; System.out.println( "b: " + Integer.toBinaryString(b)); short s = 0x7fff; // 最大 short 型16进制值 System.out.println( "s: " + Integer.toBinaryString(s)); long n1 = 200L; // long 型后缀 long n2 = 200l; // long 型后缀 (容易与数值1混淆) long n3 = 200; // Java 7 二进制字面值常量: byte blb = (byte)0b00110101; System.out.println( "blb: " + Integer.toBinaryString(blb)); short bls = (short)0B0010111110101111; System.out.println( "bls: " + Integer.toBinaryString(bls)); int bli = 0b00101111101011111010111110101111; System.out.println( "bli: " + Integer.toBinaryString(bli)); long bll = 0b00101111101011111010111110101111; System.out.println( "bll: " + Long.toBinaryString(bll)); float f1 = 1; float f2 = 1F; // float 型后缀 float f3 = 1f; // float 型后缀 double d1 = 1d; // double 型后缀 double d2 = 1D; // double 型后缀 // (long 型的字面值同样适用于十六进制和8进制 ) } } ~~~ 输出结果: ~~~ i1: 101111 i2: 101111 i3: 1111111 c: 1111111111111111 b: 1111111 s: 111111111111111 blb: 110101 bls: 10111110101111 bli: 101111101011111010111110101111 bll: 101111101011111010111110101111 ~~~ 在文本值的后面添加字符可以让编译器识别该文本值的类型。对于**Long**型数值,结尾使用大写`L`或小写`l`皆可(不推荐使用`l`,因为容易与阿拉伯数值 1 混淆)。大写`F`或小写`f`表示**float**浮点数。大写`D`或小写`d`表示**double**双精度。 十六进制(以 16 为基数),适用于所有整型数据类型,由前导`0x`或`0X`表示,后跟 0-9 或 a-f (大写或小写)。如果我们在初始化某个类型的数值时,赋值超出其范围,那么编译器会报错(不管值的数字形式如何)。在上例的代码中,**char**、**byte**和**short**的值已经是最大了。如果超过这些值,编译器将自动转型为**int**,并且提示我们需要声明强制转换(强制转换将在本章后面定义),意味着我们已越过该类型的范围界限。 八进制(以 8 为基数)由 0~7 之间的数字和前导零`0`表示。 Java 7 引入了二进制的字面值常量,由前导`0b`或`0B`表示,它可以初始化所有的整数类型。 使用整型数值类型时,显示其二进制形式会很有用。在 Long 型和 Integer 型中这很容易实现,调用其静态的`toBinaryString()`方法即可。 但是请注意,若将较小的类型传递给**Integer.**`toBinaryString()`时,类型将自动转换为**int**。