1)十六进制字面量
Java中的十六进制字面量在开头都有o)【或0X,而且遵循使用字母A到F(或者a到f)分别表示数字10到15的约定。如果对十六进制不是很熟悉,这里有一些例子:
如果不熟悉十六进制数,可以在附录8中找到有关它们工作方式的说明。上面所有的十六进制字面量都是int类型。如果想要设定一个long类型的十六进制字面量,就必须在字面量后面添加一个L,就像对十进制字面量一样。例如,0xFL是一个与十进制值l5等同的十六进制字面量。当然,可以将一个字面量,例如0xAABBCCD9L写成0xAABB_CCD9L。这里的下划线字符将十六进制数字每4个分成一组。每组的4个十六进制数对应内存中的两个字节。与十进制整数字面量一样,下划线只能在十六进制字面量的数字之间出现,因此0x_3ABC和0x3ABC_都不对。
2)二进制字面量
有时,将整数字面量设置为二进制值更加方便。在一个字面量的前面加上0b或0B就能将其标识为一个二进制数。在这种情况下,数字只能是0或1。例如,0b110010101011或0B110010101011和0xCAB以及十进制值3243一样。也可以在二进制字面量中使用下划线字符,所以可以将值写为Ob1100 1010 1011,那样更容易阅读。每组的4个二进制数对应一个十六进制数。当然,二进制字面量也可以是long类型;只需要在数字后面附加一个L。0b_1000和0b1000_都不正确,因为下划线只能在数字之间出现。
3)八进制字面量
写八进制数字字面量时要以零开头,所以035和067都是int类型的八进制数,而0777777L是long类型的八进制字面量,后者也可以写成0777_777L。八进制数只能使用数字0~7,而且每个八进制数都定义为3比特。在以前机器都用3比特倍数的长字来存储数字时,经常使用八进制数。
现在很少有必要使用八进制数,但是必须注意不要意外使用它们。如果在一个整数字面量的前面添加一个0,Java编译器就会认为在指定一个八进制值。除非其中一个数字比7大,导致编译器将其标记为错误,否则将无法知道该错误,而这个数字也不会是想象中的值。
2.2.1声明整型变量
如前所述,可以使用如下语句声明long类型的变量:
long bigOne;
该语句是对变量bigOne的声明,指定变量bigOne存储一个long类型的值。编译该语句时,会为变量bigOne分配8字节的内存。Java不会自动初始化一个这样的变量。如果想要变量有一个初始值,而不是使用内存上次使用后留下来的无效值,就必须在声明中指定自己的值。为了声明变量bigOne并初始化为2,999,999,999,只需要这样写:
long bigOne=2_999_999_999L;
这会将该变量设置为等号后面的值。在声明变量时总是初始化是一个很好的实践。在字面量中插入下划线是为了使它易读。注意如果在计算中使用没有赋值的变量,程序将无法编译。有时候如果不在声明变量时对其初始化,编译器就不能在使用该变量之前判断出它是否已经初始化,即使看起来很明显已经初始化。这也会被标记为一个错误,但是如果能在声明这些变量时总是初始化它们,就可以避免这些问题。
……
展开