《Java和Android开发学习指南(第2版)》—— 2.6 字面值

简介: 很多时候,我们需要给程序中的变量赋值,例如,将数字2赋给一个int型变量,或者将字符“c”赋给一个char型变量。为此,需要按照Java编译器能够理解的格式来书写值的表示形式。表示一个值的源代码叫作字面值。

本节书摘来异步社区《Java和Android开发学习指南(第2版)》一书中的第2章,第2.6节,作者:【加】Budi Kurniawan,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 字面值

很多时候,我们需要给程序中的变量赋值,例如,将数字2赋给一个int型变量,或者将字符“c”赋给一个char型变量。为此,需要按照Java编译器能够理解的格式来书写值的表示形式。表示一个值的源代码叫作字面值。有3种类型的字面值:基本类型的字面值、字符串字面值和空字面值。本章只介绍基本类型的字面值。第4章将介绍空字面值,第5章将介绍字符串字面值。

基本类型的字面值有4种子类型:整数字面值、浮点数字面值、字符字面值和布尔字面值。下面分别介绍这些子类型。

2.6.1 整数字面值

整数字面值可以写为十进制(以10为基数,这是我们所习惯使用的)、十六进制(以16为基数)和八进制(以8为基数)。例如,100可以表示为100。如下的整数字面值都是十进制的:

2 
123456

作为另一个示例,如下的代码将10赋值给int类型变量x。

int x = 10;

使用前缀0x或0X表示十六进制的整数。例如,十六进制的数字9E写作0X9E或0x9E。八进制的整数使用数字0作为前缀。例如,如下是八进制的数字567:

0567

整数字面值用于将值赋给byte、short、int和long类型的变量。请注意,我们所赋值的值不能超出了一个变量的存储范围。例如,一个byte的最大的值是127。因此,如下的代码将会产生一个编译错误,因为200对于byte类型来说太大了。

byte b = 200;```
要将一个值赋给long类型,在数字的后面带上一个字母L或l作为后缀。L是首选,因为它很容易和数字1区分开来。一个long类型,可以包含的值在

-9223372036854775808L到9223372036854775807L (263)之间。


Java初学者常常会问,为什么需要使用后缀l或L,因为即便没有后缀,就像如下的代码一样,程序仍然能够编译。

long a = 123;

并不完全是这样的。没有后缀L或l的一个整数字面值,会被看作是int类型。因此,如下的代码将会产生一个编译错误,因为9876543210超出了一个int的存储能力:

long a = 9876543210;`
为了解决这个问题,需要在数字的末尾添加一个L或l,如下所示:

long a = 9876543210L;```
long、int、short和byte也可以表示为二进制形式,只要使用前缀字母0B或0b就可以了。例如:

byte twelve = 0B1100; // = 12`
如果一个整数字面值太长了,可读性会受到影响。为此,从Java 7开始,我们可以在整数字面值中使用下划线来将数字分隔开。例如,如下两条语句具有相同的含义,但是第2条显然更容易阅读。

int million = 1000000; 
int million = 1_000_000;```
将下划线放在什么位置无关紧要。可以每3个数字使用一个下划线,就像上面的例子所示,或者任意多个数字使用一个。如下给出更多的例子:

short next = 12_345;
int twelve = 0B_1100;
long multiplier = 12_34_56_78_90_00L;`

2.6.2 浮点数字面值

像0.4、1.23、0.5e10这样的数字都是浮点数。浮点数有如下几个部分:

  • 一个整数部分。
  • 一个小数点。
  • 一个小数部分。
  • 一个可选的指数。

以1.23为例。对于这个浮点数,整数部分是1,小数部分是23,没有可选的指数。在0.5e10中,0是整数部分,5是小数部分,10是指数。

在Java中,有两种类型的浮点数:

  • float。32位大小。最大的正的float是3.40282347e+38,最小的正的有限非零的float是1.40239846e-45。
  • double。64位大小。最大的正的double是1.79769313486231570e+308。最小的正的有限非零的double是4.94065645841246544e-324。
  • 在float和double类型中,0的整数部分是可选的。换句话说,0.5可以写成.
    5。此外,指数部分可以表示为e或E。

要表示浮点数字面值,可以使用如下的格式之一:

Digits . [Digits] [ExponentPart] f_or_F 
. Digits [ExponentPart] f_or_F 
Digits ExponentPart f_or_F 
Digits [ExponentPart] f_or_F ```
注意,方括号之间的部分是可选的。

f_和F_部分使得浮点数字面值是float类型。如果没有这一部分,该浮点数字面值将是double类型。要明确地表示一个double类型的字面值,可以加D或d后缀。要表示一个double类型字面值,使用如下的格式之一:

Digits . [Digits] [ExponentPart] [d_or_D]
. Digits [ExponentPart] [d_or_D]
Digits ExponentPart [d_or_D]
Digits [ExponentPart] [d_or_D] `
在float和double类型中,ExponentPart定义为如下的形式:

ExponentIndicator SignedInteger ```
其中ExponentIndicator是e或者E,而SignedInteger是

Signopt Digits `
Sign是+或者-,加号是可选的。

float字面值的示例如下:

2e1f 
8.f 
.5f 
0f 
3.14f 
9.0001e+12f```
如下是double字面值的示例:

2e1
8.
.5
0.0D
3.14
9e-9d
7e123D`

2.6.3 布尔字面值

布尔类型有两个值,字面值分别为true和false。例如,如下的代码声明了一个布尔变量includeSign,并且为其分配了一个true值。

boolean includeSign = true;```
####2.6.4 字符字面值
字符字面值是一个Unicode字符,或者是单引号括起来的一个转义序列。转义序列是无法使用键盘输入的Unicode字符或者在Java中具有特殊作用的Unicode字符的一种表示方法。例如,回车字符和换行字符用于终止一行,并且没有任何可视化的表示。要表示一个换行字符,需要对其转义,即写出其字符表示。此外,单引号字符需要转义,因为单引号用于将字符括起来。

如下是字符字面值的一些示例:

'a'
'Z'
'0'
'ü'`
如下是作为转义序列的字符字面值:

'\b'    回退字符
'\t'    制表字符
'\\'    反斜杠
'\''    单引号
'\"'    双引号
'\n'    换行
'\r'    回车```
此外,Java允许我们对一个Unicode字符转义,以便能够使用ASCII字符的一个序列来表示一个Unicode字符。例如,字符£的Unicode代码是00A3。你可以编写如下的字符字面值来表示字符:

'£'`
然而,如果你没有什么办法来使用键盘输入这个字符,可以使用将其转义的方式:

相关文章
|
2天前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
2天前
|
开发框架 Java API
Java中的REST API开发详解
Java中的REST API开发详解
|
2天前
|
移动开发 Android开发 iOS开发
探索安卓与iOS开发的差异:平台选择对应用性能的影响
在移动开发的广阔舞台上,安卓与iOS这两大操作系统各据一方,引领着技术潮流与市场需求。本文深入探讨了这两个平台在开发过程中的关键差异,并分析了这些差异如何影响应用的性能和用户体验。通过对比分析,我们将揭示开发者在选择平台时应考虑的技术细节,以及这些选择如何塑造最终产品的命运。文章不仅为开发者提供了实用的指导,也为那些对移动开发感兴趣的读者提供了深刻的洞见。
|
2天前
|
消息中间件 存储 SpringCloudAlibaba
会员系统01----基于Java开发的 | BTC,完整的SpringClound微服务包含内容
会员系统01----基于Java开发的货币交易所 | BTC,完整的SpringClound微服务包含内容
|
2天前
|
敏捷开发 Java 测试技术
实现Java应用的快速开发与迭代
实现Java应用的快速开发与迭代
|
3天前
|
Java Linux 程序员
利用Java实现跨平台桌面应用的开发策略
利用Java实现跨平台桌面应用的开发策略
|
3天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与创新潜力
在移动应用开发的广阔天地中,安卓和iOS两大平台各占据一方。本文深入剖析了这两个操作系统的开发环境、工具、语言及市场趋势,旨在为开发者提供一个全面的比较视角。文章将基于最新的行业报告、技术论坛讨论以及专家分析,详细阐述两个平台的技术架构差异、开发成本和用户体验设计的不同点。通过数据支持的论证,揭示安卓与iOS在创新潜力上的独特优势,并探讨它们如何塑造未来的移动应用生态。
5 0
|
4天前
|
开发框架 Java API
Java中的REST API开发详解
Java中的REST API开发详解
|
4天前
|
测试技术 数据库 Android开发
基于Android的聊天软件的设计与实现-一个聊天软件开发起来没那么难不是?(4)
基于Android的聊天软件的设计与实现-一个聊天软件开发起来没那么难不是?
9 0
|
4天前
|
Android开发
基于Android的聊天软件的设计与实现-一个聊天软件开发起来没那么难不是?(3)
基于Android的聊天软件的设计与实现-一个聊天软件开发起来没那么难不是?
9 0