2.1.5 Java中的常量

常量就是在程序中固定不变的值,是不能改变的数据。例如,数字1、字符'a'、浮点数3.2等都是常量。在Java中,常量包括整型常量、浮点数常量、字符常量、字符串常量、布尔常量和null常量。

1.整型常量

整型常量是整数类型的数据,有二进制、八进制、十进制和十六进制4种表示形式,具体如下。

•二进制:由数字0和1组成的数字序列。从JDK 7开始,允许使用字面值表示二进制数,前面要以0b或0B开头,目的是与十进制进行区分,如0b01101100、0B10110101。

•八进制:以0开头并且其后由0~7范围内(包括0和7)的整数组成的数字序列,如0342。

•十进制:由数字0~9范围内(包括0和9)的整数组成的数字序列,如198。

•十六进制:以0x或者0X开头并且其后由0~9、A~F(包括0和9、A和F,字母不区分大小写)组成的数字序列,如0x25AF。

需要注意的是,在程序中为了标明不同的进制,数据都有特定的标识,八进制必须以0开头,如0711、0123;十六进制必须以0x或0X开头,如0xaf3、0Xff;整数以十进制表示时,第一位不能是0。例如,十进制的127,用二进制表示为0b1111111或者0B1111111,用八进制表示为0177,用十六进制表示为0x7F或者0X7F。

2.浮点数常量

浮点数常量就是在数学中的小数,浮点数分为单精度浮点数(float)和双精度浮点数(double)两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何后缀,此时JVM会默认浮点数为double类型的浮点数。浮点数常量还可以通过指数形式表示。

浮点数常量具体示例如下:


2e3f
3.6d
0f
3.84d
5.022e+23f 

3.字符常量

字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号(' ')括起来。字符常量可以是英文字母、数字、标点符号和由转义序列表示的特殊字符。具体示例如下:


'a'
'1'
'&'
'\r'
'\u0000'

上面的示例中,'\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示,是因为Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为'\u0000'。

4.字符串常量

字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号(" ")括起来,具体示例如下:


"HelloWorld"
"123"
"Welcome \n XXX"
""

一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。

5.布尔常量

布尔常量即布尔型的值,用于区分事物的真与假。布尔常量有true和false两个值。

6.null常量

null常量只有一个值null,表示对象的引用为空。关于null常量将会在第3章中详细介绍。

多学一招:十进制和二进制之间的数值转换

通过前面的介绍可知,整型常量可以分别用二进制、八进制、十进制和十六进制数表示,不同的进制并不影响数据本身,同一个整型常量可以在不同进制之间转换。下面介绍较为常用的两种进制之间相互转换的方式,具体如下。

1.十进制转二进制

十进制转换成二进制就是一个除以2取余数的过程。把要转换的数除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到的数就是转换结果。

以十进制的6转换为二进制数为例进行说明,转换过程如图2-1所示。

图2-1 十进制转二进制

十进制数据6三次除以2得到的余数依次是0、1、1,将所有余数倒序排列是110,所以十进制的6转换成二进制数,结果是110。

2.二进制转十进制

二进制转换成十进制数要从右到左用二进制位上的每个数乘以2的相应次方。例如,将最右边第一位的数乘以2的0次方,第二位的数乘以2的1次方,第n位的数乘以2的n-1次方,然后把所有相乘后的结果相加,得到的结果就是转换后的十进制数。例如,把二进制数0110 0100转换为十进制,转换方式如下:

0×20+0×21+1×22+0×23+0×24+1×25+1×26+0×27 = 100

由于0乘以任意数都是0,因此上述表达式也可以简写为

1×22+1×25+1×26 = 100

得到的结果100就是二进制数0110 0100转换后的十进制数。