3.4 Java数据类型扩展
一、整数拓展
进制问题
二进制:0b开头
十进制:正常书写
八进制:0开头
十六进制:0x开头
int i = 10;
int i2 = 010;//八进制以0开头
int i3 = 0x10;//十六进制0x开头
//输出的结果i=10、i2=8、i3=16
二、浮点数拓展
比如在实际工作中银行业务如何表示?使用float和double是有问题的。
float f = 0.1f;
double d = 1.0/10;
//上面两个变量我们认为他们的值都是0.1,执行下面语句
System.out.println(f==d);//==可以表示二者是否相等
System.out.println(f);
System.out.println(d);
//运行结果是
false
0.1
0.1
//从结果看二者的输出结果都是0.1,但是判断二者是否相等却返回了false。
float d1 = 25284157423f;
float d2 = d1+1;
System.out.println(d1==d2);
//运行结果为true
//通过上面两个实例我们发现,浮点数存在一些问题,因为浮点数能够表现的字长是有限的,浮点数会存在一个舍入误差,由于很多数字无法精确的表示,其结果只能是一个大约数。因此我们得出结论
//最好完全避免使用浮点数进行比较
//最好完全避免使用浮点数进行比较
//最好完全避免使用浮点数进行比较
看过如上代码我们发现不能使用浮点数来应对银行业务。而是使用BigDecimal的数学工具类,Java中有很多这种预先自定义好的工具类可以直接拿来用。这里我们也得出结论,不要拿浮点数作比较。如果需要计算,而且不能有误差就用Java写好的BigDecimal类。
三、字符拓展
所有的字符本质还是数字
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//将字符类型强制转换为整数类型
System.out.println(c2);
System.out.println((int)c2);
//输出结果
a
97
中
20013
我们通过单引号表示字符常量,char类型数据涉及到编码问题,编码中有Unicode编码,Unicode可以处理各种语言的文字,占用两个字节,最多可以表示65536个字符。Unicode有一个编码表,编码表中97编码对应的就是a,而A对应的是65。一般都是通过Unicode编码转义来表示,从U0000到UFFFF,这是Unicode编码表示的区间范围
char c3 = '\u0061';//这里的\就是转义字符
System.out.println(c3);
//结果为
a
四、转义字符
\t //表示制表符
\n //表示换行
五、字符串拓展
String sa = new String(original:"Hello,World");
String sb = new String(original:"Hello,World");
System.out.println(sa==sb);
String sc = "Hello,World";
String sd = "Hello,World";
System.out.println(sc==sd);
//运行结果
false
true
从这个实例中我们知道等学到对象的时候从内存级别分析就能让我们明白为什么眼睛看到一样的东西却不相等。
六、布尔值扩展
boolean flag = true;
if(flag==true){}
if(flag){}
//这两个判断语句是一样的