walkWithJoy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、整数扩展

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编码值。

posted on 2024-07-16 17:36  悦心之行  阅读(36)  评论(0)    收藏  举报