1. 概述
在使用Java编程语言时,我们会大量使用字面量。本教程将探讨所有类型的字面量以及如何使用它们。
2. 什么是Java字面量?
Java字面量是在代码中指定的常量值。 它可以是任何类型——整数、浮点数、双精度数、长整型、字符串、字符或布尔值。
下面的例子中,数字1和字符串literal_string就是字面量。
int x = 1;
String s = "literal_string";
在处理字面量时,理解Java基本类型同样重要。
3. 字面量类型
让我们来看看不同类型字面量的一些示例。
3.1. 整数字面量
对于整数类型(如int、long、short和byte),我们有多种表示方式。
首先,我们可以使用十进制字面量(基数10),这是最常见的,因为我们日常使用的都是这种形式。
int x = 1;
其次,我们可以使用八进制形式(基数8)。在这种形式下,它们必须以0开头。
int x = 05;
第三,整数字面量也可以用十六进制形式(基数16)表示。它们必须以0x或0X开头。
int x = 0x12ef;
最后,我们有二进制形式(基数2)。这种形式在Java 1.7中引入,字面量必须以0b或0B开头。
int x = 0b1101;
在上述例子中,只要字面值不超过类型限制,我们可以将int
替换为任何整数类型。这些字面量默认被视为int
。对于long
、short
或byte
,编译器会检查值是否符合类型的限制,如果符合,就会将其视为相应类型的字面量。
要覆盖默认的int
字面量,对于长整型字面量,我们可以使用l
或L
。只有当字面值超过int
限制时,才需要这样做。
3.2. 浮点数字面量
浮点数字面量默认被视为double
。我们也可以通过使用d
或D
指定它是double
。虽然这不是强制性的,但这是一个好习惯。
要指定一个float
,我们可以使用f
或F
。对于float
类型的字面量,这是必需的。
浮点数字面量只能以十进制形式(基数10)指定:
double d = 123.456;
float f = 123.456;
float f2 = 123.456d;
float f3 = 123.456f;
第二个和第三个例子由于类型不匹配而无法编译。
3.3. 字符字面量
对于char
数据类型,字面量有几种表示方式。
单引号中的字符很常见,特别适用于特殊字符。
char c = 'a';
char c2 = '\n';
我们可以只使用单个字符或单引号中的一个特殊字符。
用于字符的整数值会被转换为其对应字符的Unicode值:
char c = 65;
我们可以像整数字面量那样来表示它。
最后,我们可以使用Unicode表示法:
char c= '\u0041';
最后两个例子中的表达式会计算字符A的值。
3.4. 字符串字面量
任何双引号之间的文本都是一个String
字面量:
String s = "string_literal";
String
字面量只能在一行内。要创建多行String
,我们需要使用一个会在编译时执行的表达式:
String multiLineText = "When we want some text that is on more than one line,\n"
+ "then we can use expressions to add text to a new line.\n";
4. short
和byte
字面量
上面我们已经看到了声明各种类型字面量的方式。除了byte
和short
之外,其他类型我们不需要先创建变量,可以直接使用字面值。
例如,在调用方法时,我们可以直接传递字面值:
static void literals(int i, long l, double d, float f, char c, String s) {
// do something
}
//Call literals method
literals(1, 123L, 1.0D, 1.0F, 'a', "a");
对于这些类型,没有特定的表示符号,所以它们不会作为默认类型使用。在上述例子中,F
是必需的标记。
令人惊讶的是,对于byte
和short
类型,会出现问题:
static void shortAndByteLiterals(short s, byte b) {
// do something
}
//Call the method
shortAndByteLiterals(1, 0); // won't compile
尽管有这个限制,我们有两个解决方案。
第一个解决方案是使用之前已声明的变量:
short s = 1;
byte b = 1;
shortAndByteLiterals(s, b);
另一个选择是将字面值转换为类型:
shortAndByteLiterals((short) 1, (byte) 0);
这样做的目的是让编译器使用适当的类型。
5. 总结
在这篇文章中,我们探讨了在Java中指定和使用字面量的不同方式。