Java程序中总是会出现一些数字。我们通常都是用常规的方式来表示这些数字,如以下代码所示
int a = 1;
double b = 1.5;
但是数字也可以有非常规写法,在这里我们用一篇短文简单总结一下
一、整数的非十进制写法
首先强调一下,这里所说的整数并不是单指int类型,而是包含了int、byte、short和long这4种整数类型。在Java语言中,除了可以用十进制的形式表示整数以外,还可以用二进制、八进制和十六进制的方式表示整数。如果用十六进制的形式表示一个整数,数字要以0X开头,如果用八进制表示,则用0开头,而用二进制表示,用0B开头,如以下代码所示
byte n1 = 0B1011;//二进制表示法,换算等于十进制的11
int n2 = 072;//八进制表示法,换算等于十进制的58
long n3 = 0XFF5C;//十六进制表示法,换算等于十进制的65372
以上代码中就是数字的非十进制表示法以及对应的换算结果。需要注意的是,我们在一开始就强调了这几种表示法都是针对整数而言的,所以说,这几种表示数字的写法中,不能出现小数点,否则会出现语法错误!
二、浮点数的科学计数法
Java语言为了能够让浮点数表示出更大范围的数字,除了允许我们使用常规写法以外,还可以让我们用科学计数法的形式表示浮点数。我们来看一个例子
float n4 = 2.3E3F;//换算等于2.3*1000
使用科学计数法表示浮点数,需要用一个字母E来把系数和指数隔开。具体来说就是:字母E的前面是一个浮点数,后面是一个整数。E之前的浮点数是系数,而E之后的整数就表示10的多少次方,这个整数可以是负数。上面代码中,数字2.3E3F其实就是2.3乘以10的3次方。在数字的最后又出现了一个字母F,是因为浮点数常量默认都是double类型,把double类型的数据赋值给float类型的变量,要在末尾加字母F进行数据类型转换。
另外,必须强调一点就是:科学计数法只能用来表示浮点数,如果我们把一个用科学计数法表示的数字赋值给整型变量就会出现语法错误。即便字母E前面的系数不带小数点也不行!
三、数字中带有下划线
int n5 = 1000000000;
如果你看到上面的数字,我想你肯定会数一下这个数字中有多少个0。我们知道,在财会行业,为了降低读错数字的概率,人们经常会在数字中加入逗号,比如会把100000写成100,100。从JDK1.7开始,Java语言也借鉴了这种写法,但做了一点点改变,把数字之间的分隔符用逗号改成了下划线,比如说,我们可以把刚才代码中那个很长的数字写成
int n5 = 1_000_000_000;
对于这种加下划线的写法,需要强调几个注意事项
- 这种写法是从JDK1.7才开始引入的,早期版本的JDK并不支持这种写法
- 下划线出现的位置随意,并非一定要每3位数字才能出现一个下划线
- 无论浮点数还是整数,数字当中都可以出现下划线