一、整数扩展
Java中四种进制的表示方式:二进制0b,八进制0,十进制默认,十六进制0x或0X
public class Demon02{
public static void main(String[] args){
//二进制
int i = 0b10;
//八进制
int i2 = 010;
//默认十进制
int i3 = 10;
//十六进制
int i3 = 0x10;
System.out.println(i); //2
System.out.println(i2); //8
System.out.println(i3); //10
System.out.println(i4); //16
}
}
二、浮点数扩展
1.当float和double进行数值比较时
public class Demon02 {
public static void main(String[] args) {
float a = 0.1f;
double b = 0.1d;
double c = a;
System.out.println(a); //0.1
System.out.println(b); //0.1
System.out.println(c); //0.10000000149011612
System.out.println(a==b); //false
System.out.println(a==(float)b); //true
}
}
在数值相等的情况下,两个数值比较却返回false?
主要原因是double 和 float 两个数据类型的精度不同所引起的
我们将 float 类型的 a,转换成 double类型的 c,并输出后,我们可以看出float的0.1 与double 的 0.1是不同的
当我们进行数值比较的时候,尽量将两个数值转换成同一类型进行比较
2.浮点数值不适用于无法接受舍入误差的金融计算中
如果在数值计算中不允许有任何舍入误差,就应该用BigDecimal类
public class Demon02 {
public static void main(String[] args) {
//0.10000000000000009
System.out.println((double)2.0-(double)1.9);
//0.100000024
System.out.println((float)2.0f-(float)1.9f);
}
}
我们可以看出,这是有误差的。
而这种舍入误差的原因主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。
这就好像十进制无法精确地表示分数1/3一样。这也是在精确地数值计算中,使用BigDecimal类的原因
三、字符型扩展
char是字符型,在Java中规定为2个字节。
同样地,目前全球通用的字符集编码Unicode码,最常见的也是用2个字节表示字符。
其实,Java可以通过字符型和整型的相互强制类型转换,实现由字符得出其Unicode码,也可通过Unicode码得到对应的字符。
public class Demon02 {
public static void main(String[] args) {
char a= '\u0061';
char b = 'a';
System.out.println(a); //a
//字符强制类型转为int,再转为16进制,即为Unicode码
System.out.println(Integer.toHexString((int)b)); // 61
}
}
由此可见,Java中char是值类型,将字符显示转换为数值会得到字符的Unicode编码值。
标签:Java,数据类型,float,扩展,System,double,println,public,out From: https://www.cnblogs.com/walkWithJoy/p/18305765