《21天学通Java(第7版)》—— 2.4 字面量

简介: 除变量外,还可以在Java语句中使用字面量。字面量可以是任何直接表示一个值的数字、文本或其他信息。 下面的赋值语句使用了字面量: int year = 2016; 其中的字面量2016表示整数值2016。

本节书摘来异步社区《21天学通Java(第7版)》一书中的第2章,第2.4节,作者: 【美】Rogers Cadenhead(罗格斯 卡登海德),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 字面量

除变量外,还可以在Java语句中使用字面量。字面量可以是任何直接表示一个值的数字、文本或其他信息。

下面的赋值语句使用了字面量:

int year = 2016;
其中的字面量2016表示整数值2016。数字、字符和字符串都是字面量。Java有一些特殊类型的字面量,它们表示各种数字、字符、字符串和布尔值。

2.4.1 数字字面量

Java有几种整型字面量。例如,数字4是一个int类型的整型字面量,可将其赋给byte或short类型的变量,因为它足够小,在这些整数类型的取值范围内。位于int取值范围之外的整型字面量将被视为long类型。也可以在后面加上字母L(或l)来指出字面量的类型为long。例如,下面的语句将4视为一个long值,如下例所示:

pennyTotal = pennyTotal + 4L;
该语句给变量pennyTotal的当前值加上long型字面值4。

要表示负的数字字面量,可在前面加上负号(−),如−45。

浮点数字面量使用句点(.)表示小数点,这与您想的完全相同。下面的语句使用字面量来设置一个double变量的值:

double gpa = 3.55;
所有的浮点数字面量都被视为double类型,而不是float类型。要将字面量的类型指定为float,可加上字母F(或f),如下所示:

float piValue = 3.1415927F;
在浮点数字面量中,可以使用指数表示法,即使用字母e(或E),而指数可以是负数。下面的语句使用了指数表示法:

double x = 12e22;
double y = 19E-95;

对于很大的整型字面量,为提高其可读性,可在其中添加下划线。这种下划线的作用与表示千分位的逗号相同,旨在让数字更易读。请看下面两个例子,其中一个使用了下划线:

int jackpot = 3500000;
int jackpot = 3_500_000;

其中两个字面量的值都是3500000,但第2条语句更清晰。Java编译器忽略这样的下划线。

Java也支持使用二进制、八进制和十六进制表示的数字字面量。

二进制是以2为基数的计数系统,这意味着每位只能是0或1。对计算机来说,由0和1组成的值最简单,也是重要的计算部分。在二进制中,从0开始依次为0、1、10、11、100、101等。每位称为一个比特,8比特为一个字节。二进制字面量以0b打头,如0b101(十进制值5)、0b11111111(十进制值127)。

八进制是以8为基数的计数系统,这意味着每位只能是0和7之间的值。在八进制数中,第8个数是10。八进制字面量以0打头,因此010表示十进制值8,012表示十进制值9,而020表示十进制值16。

十六进制是以16为基数的计数系统,每位可能的取值为16个。字母A~F表示最后的6个数字,因此这16个数依次为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。十六进制字面量以0x打头,如0x12(十进制值18)或0xFF(十进制值255)。

对有些编程任务而言,八进制和十六进制比十进制更适合。如果您曾设置过网页的背景颜色,可能使用过表示绿色、蓝色和奶油硬糖色的十六进制数,它们分别是0x001100、0x000011和0xFFCC99。

2.4.2 布尔字面量

布尔值true和false也是字面量。boolean变量的取值只能是true或false。

下面的语句给一个boolean变量赋值:

boolean chosen = true;

如果您使用过其他语言,如C语言,则可能认为1和true等价,而0和false等价。在Java中,情况并非如此,必须使用值true和false来表示布尔值。
注意字面量true并不需要用引号括起。如果被引号括起,则Java编译器会将其视为字符串。

2.4.3 字符字面量

字符字面量是用单引号括起的单个字符,如'a'、'#'和'3'。您也许熟悉ASCII字符集,它包括128个字符,其中有数字、字母、标点和其他对计算有帮助的符号。Java使用16位的Unicode标准,除ASCII字符外,还支持其他数以千计的字符。

有些字符字面量表示的是非打印字符或不能通过键盘输入的字符。表2.2列出了一些特殊编码,它们用于表示这些特殊字符以及Unicode字符集中的字符。

c93d4382a70313dda95be959f7c5563437b4fe03

表2.2的八进制、十六进制和Unicode转义编码中,字母d表示一个数字或十六进制数字(a~f或A~F)。

2.4.4 字符串字面量

可在Java程序中使用的最后一种字面量表示一个字符串。Java中的字符串是一种对象,而不是一种基本数据类型。同时,不像C语言那样,字符串被存储在数组中。

因为字符串对象是Java中的真正对象,所以存在用于合并和修改字符串以及判断两个字符串是否相同的方法。

字符串字面量是用双引号括起的一系列字符,如下所示:

String quitMsg = "Are you sure you want to quit?";
String password = "drowssap";

字符串中可以包含表2.2列出的转义字符,如下所示:

String example = "Socrates asked, \"Hemlock is poison?\"";
System.out.println("Sincerely,\nMillard Fillmore\n");
String title = "Sams Teach Yourself Node in the John\u2122";

在上述最后一行代码中,在支持Unicode的系统上,Unicode编码序列u2122将生成一个TM符号。

虽然Java支持对Unicode字符的传输,但要在程序运行时显示这些字符,计算机也必须支持Unicode。Unicode提供了一种对字符进行编码的方式,可用于支持该标准的系统。Java支持任何Unicode字符的显示,只要该字符能够被主机的某种字体表示出来。

虽然在程序中使用字符串字面量的方式与其他字面量类似,但在后台对它们的处理是不一样的。

对于字符串字面量,Java将其存储为String对象。您不必像使用其他对象那样,显式地创建一个新对象,因此使用起来与基本数据类型一样简单。从这种意义上说,字符串与众不同——基本数据类型都不会被存储为对象。本章后面将更详细地介绍字符串和String类。

相关文章
|
Java
java学习第一天笔记-java基础概念04-字面量2-基本用法21
java学习第一天笔记-java基础概念04-字面量2-基本用法21
50 0
java学习第一天笔记-java基础概念04-字面量2-基本用法21
|
Java
java学习第一天笔记-java基础概念03-字面量2-20
java学习第一天笔记-java基础概念03-字面量2-20
41 0
java学习第一天笔记-java基础概念03-字面量2-20
|
Java
java学习第一天笔记-java基础概念03-字面量1-19
java学习第一天笔记-java基础概念03-字面量1-19
39 0
java学习第一天笔记-java基础概念03-字面量1-19
《Java 7程序设计入门经典》一2.3 字面量
本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第2章,第2.3节,作者(美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1999 0
|
1天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
5 0
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
1天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
6 0
|
1天前
|
监控 安全 Java
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
7 2
|
1天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
8 1