JAVA数据类型的一些扩展
一.整数类型扩展
整数各种进制表示方法:
//整数扩展 十进制 二进制0b 八进制0 十六进制0x
int i = 1;
int i1 = 0b10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
二.浮点类型扩展
我们通常用float或者double来进行浮点类型的定义,但其中也有一些问题要注意。
我们来看下面这部分代码:
float i1 = 0.1f;
double i2 = 1.0/10;
System.out.println(i1==i2);
float i3 = 12345465564645f;
float i4 = i3+1;
System.out.println(i3==i4);
输出结果:
在这里我们可以看到,i1和i2明明同样是0.1的数据对比却是false;
i3,i4明明不等,输出却是true;这是为什么呢?
浮点类型大概可以概括为以下几个特征:有限,离散,舍入误差,大约,接近但不等于。
所以程序中应尽量避免浮点数的比较,并且一些要求精确度较高的数字不要用浮点类型表示。
因此在需要表示一些要求精度较高的业务的时候,例如银行业务的钱。
通常用BigDecima提供的方法进行一些比较和运算。
三.字符类型的扩展
先看下面一组代码:
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//将c1强制转换为int类型
System.out.println(c2);
System.out.println((int)c2);//将c2强制转换为int类型
char c3 = '\u0061';
System.out.println(c3);
输出结果:
可以看到字符’a’和字符’中’在被强制转换为int类型之后变成了对应的数字,由此可以看出字符从本质上来说就是数字。
所有字符都能在Unicode编码表上找到对应的数字表示,范围为U0000 - UFFFF;所以c3的输出结果就是’a’。