Java中的常量
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符'a'、浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等。接下来就对这些常量进行详细讲解。
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,0本身除外。例如十进制的127,用二进制表示为01111111,用八进制表示为0177,用十六进制表示为0x7F或者0X7F。
2.浮点数常量
浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何后缀,此时Java虚拟机会将浮点数默认识别为double双精度浮点数。浮点数常量还可以通过指数形式来表示。具体示例如下:
2e3f 3.6d 0f 3.84d 5.022e+23f
3.字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号(' ')引起来,它可以是英文字母、数字、标点符号以及由转义序列来表示的特殊字符。具体示例如下:
'a' '1' '&' '\r'
4.字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号(" ")引起来,具体示例如下:
"HelloWorld" "123" "Welcome \n XXX" ""
一个字符串常量可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
5.布尔常量
布尔常量即布尔类型的两个值true和false,该常量用于区分一个条件的真假。
6.null常量
null常量只有一个值null,表示对象的引用为空。关于null常量将会在第三章中详细讲解。
而Java中的常量,其实就是特殊的变量,也是固定不变的量,有且只能进行一次赋值。Java中定义常量的语法也非常简单,只需要在定义变量的语法基础上加上一个final关键字修饰即可,其语法格式如下:
final 常量类型 常量名 [= 初始值];
上述定义Java常量的语法格式与定义Java变量的语法格式基本相同,同样,定义Java常量需要声明定义常量类型、常量名,并可以对该常量进行初始化赋值,也可以后续赋值,唯一不同的是,定义Java常量时必须用final关键字修饰,来声明是一个不可改变的量。其具体使用示例如下:
final int a=0, b; // 定义一个int类型的常量a和b,并为常量a初始化赋值0
b= 1; // 后续为常量b赋值
多学一招:转义符——反斜杠(\)
在字符常量中,反斜杠(\)是一个特殊的字符,被称为转义符,它的作用是用来转义紧随其后的一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如“\n”表示换行。下面列出一些常见的转义字符:
● \r 表示回车,将光标定位到当前行的开头,不会跳到下一行。
● \n 表示换行,换到下一行的开头。
● \t 表示制表符,将光标移到下一个制表符的位置,就像在文档中用Tab键一样。
● \b 表示退格符号,就像键盘上的Backspace。
以下的字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符来表示:
● ' 表示单引号字符,Java代码中单引号表示字符的开始和结束,如果直接写单引号字符('),程序会认为前两个是一对,会报错,因此需要使用转义(')。
● " 表示双引号字符,Java代码中双引号表示字符串的开始和结束,包含在字符串中的双引号需要转义,比如"he says,"thank you"."。
●\\ 表示反斜杠转义字符,由于在Java代码中的斜杠(\)是转义符,因此需要表示字面意义上的\,就需要使用双斜杠\。
多学一招:整型常量进制间的转换
通过前面的介绍可以知道,整型常量可以分别用二进制、八进制、十进制和十六进制表示,不同的进制并不影响数据本身的大小,同一个整型常量可以在不同进制之间转换,具体转换方式如下:
1.十进制和二进制之间的转换
(1)十进制转二进制*
十进制转换成二进制就是一个除以2取余数的过程。把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
以十进制的6转换为二进制为例进行说明,如图1所示。
图1 十进制转二进制
三次除以2计算得到余数依次是:0、1、1,将所有余数倒序排列是:110。所以十进制的6转换成二进制,结果是110。
(2)二进制转十进制
二进制转换成十进制要从右到左用二进制位上的每个数去乘以2的相应次方,例如,将最右边第一位的数乘以2的0次方,第二位的数乘以2的1次方,第n位的数乘以2的n-1次方,然后把所有乘得的结果相加,得到的结果就是转换后的十进制。
以二进制数01100100转换为十进制为例进行说明,转换方式如下:
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就是二进制数01100100转换后的十进制表现形式。
2.二进制和八进制、十六进制之间的转换
编程中之所以要用八进制和十六进制,是因为它们与二进制之间的互相转换很方便,而且它们比一串长的二进制数方便书写和记忆。接下来,就为大家详细介绍如何将二进制转换为八进制和十六进制。*
(1)二进制转八进制
二进制转八进制时,首先需要将二进制数自右向左每三位分成一段(不足三位的,在左侧补0),然后将二进制数每段的三位数转为八进制的一位,转换过程中数值的对应关系如表1所示。
表1 二进制和八进制数值对应表
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
了解了二进制转八进制的规则,接下来详细讲解如何将一个二进制数00101010转为八进制,具体步骤如下:
1) 每三位分成一段,结果为:000 101 010
2)将每段的数值分别查表替换,结果如下:
000→ 0
101→ 5
010→ 2
3) 将替换的结果进行组合,转换的结果为:052(注意八进制必须以0开头)
(2)二进制转十六进制
二进制转十六进制,与转八进制类似,不同的是要将二进制数每四位分成一段(不足四位的,在左侧补0),然后通过查表将二进制数每段的四位数转换为八进制的每一位即可。二进制转十六进制过程中数值的对应关系如表2所示。
表2 二进制和十六进制数值对应表
二进制 | 十六进制 | 二进制 | 十六进制 | |
---|---|---|---|---|
0000 | 0 | 1000 | 8 | |
0001 | 1 | 1001 | 9 | |
0010 | 2 | 1010 | A | |
0011 | 3 | 1011 | B | |
0100 | 4 | 1100 | C | |
0101 | 5 | 1101 | D | |
0110 | 6 | 1110 | E | |
0111 | 7 | 1111 | F |
了解了二进制转十六进制的规则,接下来通过一个例子来学习一下。假设要将一个二进制数10100101转为十六进制,具体步骤如下:
1) 每四位分成一段,结果为:1010 0101
2) 将每段的数值分别查表替换,结果如下:
1010 → A
0101 → 5
3) 将替换的结果进行组合,转换的结果为:0xA5或0XA5(注意十六进制必须以0x或者0X开头)。