java数据类型扩展

public class Demo01 {
    public static void main(String[] args) {
        // 二进制:0b开头;八进制:0开头;十六进制:ox开头
        int decimal = 123;
        int binary = 0b1111011;
        int octal = 0173;
        int hex = 0x7B;
        System.out.println("十进制: " + decimal);
        System.out.println("二进制: " + binary);
        System.out.println("八进制: " + octal);
        System.out.println("十六进制: " + hex);
        System.out.println("======================================");
        //❓为什么0.1f与1.0/10不相等
        /*
        - 十进制小数0.1(或1/10)无法被二进制精确表示,就像十进制无法精确表示1/3(结果是无限循环小数0.333...)一样。
        - 二进制中,0.1是一个无限循环小数,由于计算机内存有限,浮点数只能存储这个无限序列的近似值。
        - 0.1f和1.0/10虽然都近似表示0.1,但它们的精度不同:
            - float f = 0.1f存储的是 32 位近似值。
            - double d = 1.0/10存储的是 64 位近似值,精度更高。
         */
        // 所以银行业务类不使用float与double类型,使用Bigdecimal数学工具类
        float f = 0.1f;
        double d = 1.0 / 10;
        System.out.println(f == d);//输出为"false"
        System.out.println("======================================");
        //❓为什么float d1 = 13213135135131f与float d2 = d1+1相等?
        /*
        - 大数超出了float的精度范围(7 位有效数字)。
        - 相邻浮点数的间隔过大(例如 2^43 数量级的间隔为 16384),导致微小增量(如 + 1)被舍入。
         */
        float d1 = 13213135135131f;
        float d2 = d1 + 1;
        System.out.println(d1 == d2);//输出为"true"
        System.out.println("======================================");
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int) c1);//强制转换
        System.out.println(c2);
        System.out.println((int) c2);//强制转换
        //所有字符本质还是数字
        //Unicode 为每个字符分配的唯一数字,范围从 U+0000 到 U+10FFFF
        char c3 = '\u0061';
        System.out.println(c3);
        //转义字符,EX:\t 制表符;\n 换行
        System.out.println("Hello\tworld");
        System.out.println("Hello\nworld");
        //布尔值扩展
        boolean flag = true;
        if (flag) { }  //不需要写flag=true,默认
    }
}