zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

AndroidJAVA开发 2.6 学习指南
2023-09-11 14:17:34 时间

本节书摘来异步社区《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 

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。你可以编写如下的字符字面值来表示字符:

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


Android开发:使用Java对手机截图图片进行任意区域的颜色对比度处理操作 开发项目过程中,对于手机屏幕截图,需要对获取到的截图的任意部分进行区域颜色对比度的识别操作,由此判定任意指定区域是否满足某对比度基本标准,但是该功能在网上任何地方都没有找到过Java方面的代码,于是根据RGB转换测试的原理:即获取每个像素点的RGB,通过RGB对比度定义公式进行像素点的集合换取。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。