本节书摘来异步社区《21天学通Java(第6版)》一书中的第2章,第2.4节,作者:【美】Rogers Cadenhead,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 字面量
21天学通Java(第6版)
除变量外,还可以在Java语句中使用字面量。字面量可以是任何直接表示一个值的数字、文本或其他信息。
下面的赋值语句使用了字面量:
其中的字面量2012表示整数值2012。数字、字符和字符串都是字面量。Java有一些特殊类型的字面量,它们表示各种数字、字符、字符串和布尔值。
2.4.1 数字字面量
Java有几种整型字面量。例如,数字4是一个int类型的整型字面量,可将其赋给byte或short类型的变量,因为它足够小,在这些整数类型的取值范围内。位于int取值范围之外的整型字面量将被视为long类型。也可以在后面加上字母L(或l)来指出字面量的类型为long。例如,下面的语句将4视为一个long值,如下例所示:
该语句给变量pennyTotal的当前值加上long型字面值4。
要表示负的数字字面量,可在前面加上负号(−),如−45。
注意 Java也支持使用二进制、八进制和十六进制表示的数字字面量。
二进制是以2为基数的计数系统,这意味着每位只能是0或1。对计算机来说,由0和1组成的值最简单,也是重要的计算部分。在二进制中,从0开始依次为0、1、10、11、100、101等。每位称为一个比特,8比特为一个字节。
八进制是以8为基数的计数系统,这意味着每位只能是0和7之间的值。在八进制数中,第8个数是10(Java字面量为010)。
十六进制是以16为基数的计数系统,每位可能的取值为16个。字母A~F表示最后的6个数字,因此这16个数依次为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
对有些编程任务而言,八进制和十六进制系统比十进制系统更适合。如果您曾设置过网页的背景颜色,可能使用过表示绿色、蓝色和奶油硬糖色的十六进制数,它们分别是001100、000011和FFCC99。
如果需要使用八进制的字面量整数,可在前面加上0。例如,八进制的777应为0777。对于十六进制的整数字面量,应在前面加上0x,如0x12或0xFF。
使用字面量来指定二进制值是Java 7新增的功能。为此,需要在字面量前面加上0b。例如,0b101表示二进制值101,而0b11111111表示二进制值11111111。
浮点数字面量使用句点(.)表示小数点。下面的语句使用字面量来设置一个double变量的值:
所有的浮点数字面量都被视为double类型,而不是float类型。要将字面量的类型指定为float,可加上字母F(或f),如下所示:
在浮点数字面量中,可以使用指数表示法,即使用字母e(或E),指数可以是负数。下面的语句使用了指数表示法:
对于很大的整型字面量,为提高其可读性,可在其中添加下划线,这是Java 7新增的功能。这种下划线的作用与表示千分位的逗号相同,旨在让数字更易读。请看下面两个例子,其中一个使用了下划线:
其中两个字面量的值都是3500000,但第2条语句更清晰。Java编译器忽略这样的下划线。
警告如果您在NetBeans中使用Java 7新增的功能时出现错误消息,请设置项目,使其使用最新的Java版本。为此,选择菜单“文件”>“项目属性”,这将打开“项目属性”对话框。在“类别”列表中选择“库”,并从“Java平台”下拉列表中选择“JDK 1.7”。
2.4.2 布尔字面量
布尔值true和false也是字面量。boolean变量的取值只能是true或false。
下面的语句给一个boolean变量赋值:
警告如果您使用过其他语言,如C语言,则可能认为1和true等价,而0和false等价。在Java中,情况并非如此,必须使用值true和false来表示布尔值。
注意字面量true并不需要用引号括起。如果被引号括起,则Java编译器会将其视为字符串。
2.4.3 字符字面量
字符字面量是用单引号括起的单个字符,如'a'、'#'和'3'。您也许熟悉ASCII字符集,它包括128个字符,其中有数字、字母、标点和其他对计算有帮助的符号。Java使用16位的Unicode标准,支持数以千计的其他字符。
有些字符字面量表示的是非打印字符或不能通过键盘输入的字符。表2.2列出了一些特殊编码,它们用于表示这些特殊字符以及Unicode字符集中的字符。
表2.2的八进制、十六进制和Unicode转义编码中,字母d表示一个数字或十六进制数字(a~f或A~F)。
2.4.4 字符串字面量
可在Java程序中使用的最后一种字面量表示一个字符串。Java中的字符串是一种对象,而不是一种基本数据类型。同时,不像C语言那样,字符串被存储在数组中。
因为字符串对象是Java中的真正对象,所以存在用于合并和修改字符串以及判断两个字符串是否相同的方法。
字符串字面量是用双引号括起的一系列字符,如下所示:
字符串中可以包含表2.2列出的转义字符,如下所示:
在上述最后一行代码中,在支持Unicode的系统上,Unicode编码序列u2122将生成一个TM符号。
警告虽然Java支持对Unicode字符的传输,但要显示这些字符,用户的系统也必须支持Unicode。Unicode提供了一种对字符进行编码的方式,可用于支持该标准的系统。Java 2支持任何Unicode字符的显示,只要该字符能够被主机的某种字体表示出来。
有关Unicode的更详细的信息,请访问Unicode联盟网站www.unicode.org。
虽然在程序中使用字符串字面量的方式与其他字面量类似,但在后台对它们的处理是不一样的。
对于字符串字面量,Java将其存储为String对象。您不必像使用其他对象那样,显式地创建一个新对象,因此使用起来与基本数据类型一样简单。从这种意义上说,字符串与众不同—基本数据类型都不会被存储为对象。本章后面将更详细地介绍字符串和String类。