Java基础04:数据类型扩展

1.整数扩展

        如何在Java中表示二进制、八进制、十六进制整数。

public class List02 {
    public static void main(String[] args) {
        //整数拓展:在Java中如何表示二进制、八进制、十六进制
        int i = 101;
        int i2 = 0b101;  //    二进制使用'0b'开头表示
        int i3 = 0101;   //    八进制使用'0'开头表示
        int i4 = 0x101;  //   十六近进制使用'0x'表示
        System.out.println(i);  // 输出101
        System.out.println(i2);  //输出5
        System.out.println(i3);  //输出65
        System.out.println(i4);  //输出257
    }
}

2.浮点数扩展

        在进行银行类业务时,往往涉及数额较大的金钱,如果使用浮点数float或者double表示钱数可能会产生错误。以下是错误举例:

public class List03 {
    //浮点数扩展
    public static void main(String[] args) {
        float f = 0.1f;
        double d = 1.0/10;
        System.out.println(f);  //输出0.1
        System.out.println(d);  //输出0.1
        System.out.println(f==d);//输出 false,
        /*
        尽管 f 和 d 这两个数值在十进制下看起来是相等的,‌但由于浮点数的精度和表示方式,
        ‌它们在内存中的实际存储值可能存在微小的差异,‌因此比较这两个值时会发现它们不相等。‌
         */
        System.out.println("=================================");
        float d1 = 2323232323232323f;
        float d2 = d1 +1;
        System.out.println(d1==d2); // 输出true
        /*尽管d1和d2看起来不相等,但是d1 和 d2比较的结果却是相等的,
          这是因为float的精度是有有限的,浮点数的表示存在舍入误差;
        */
    }
}

        Java中的 float 和 double 类型不相等的原因主要是因为浮点数的表示存在舍入误差。‌

        浮点数(‌包括 Java 中的 float 和 double 类型)‌在计算机中的表示是有限的,‌并且存在舍入误差。‌这种误差来源于浮点数的二进制表示方式,‌以及计算机内部存储浮点数时所能提供的精度限制。‌具体来说,‌即使两个浮点数看起来数值相同,‌由于它们的二进制表示可能存在微小的差异,‌因此它们在内存中的存储值并不完全相同,‌从而导致它们在比较时可能不相等。‌

        例如,‌在 Java 中,‌当你声明一个 float 类型的变量并赋值为 0.1f 时,‌以及声明一个 double 类型的变量并计算 1.0/10 时,‌尽管这两个数值在十进制下看起来是相等的,‌但由于浮点数的精度和表示方式,‌它们在内存中的实际存储值可能存在微小的差异,‌因此比较这两个值时会发现它们不相等。‌

        为了避免这种精度问题,‌Java 提供了 BigDecimal 类,‌它允许进行高精度的数学运算,‌适用于需要高精度计算的场景,‌如金融计算。‌BigDecimal 通过以字符串的形式存储数字来进行计算,‌从而避免了二进制浮点数表示可能带来的精度损失问题。‌

        总的来说,‌浮点数的比较应该谨慎进行,‌特别是在需要高精度计算的场景中,‌应优先考虑使用 BigDecimal 类型来确保计算的准确性和稳定性。

3.字符扩展

        所有的字符本质还是数字,字符可以通过Unicode编码表转换为整数;

public class List04 {
    public static void main(String[] args) {
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c1);//输出‘a’

        System.out.println((int)c1); //将字符强制转换为整数,输出97

        System.out.println(c2);//输出 ‘中’

        System.out.println((int)c2); //将字符强制转换为整数,输出20013

        char c3 = '\u0061'; //Unicode 编码写法;0061是十六进制,转为十进制就是 97
        System.out.println(c3); //输出 a
    }
}

1.Unicode编码

        ‌Unicode编码是一种字符编码标准,旨在解决传统字符编码方案的局限性,为全球几乎所有书写系统提供统一的字符编码。它通过为每个字符分配一个唯一的代码(即一个整数),以数字形式处理字符,并将视觉演绎工作留给其他软件处理,如网页浏览器或文字处理器。Unicode编码方案包括‌UTF-8、‌UTF-16和‌UTF-32等多种格式,用于将Unicode字符转换为计算机可以处理的二进制数据。UTF-8是最常用的格式,支持变长编码,可以兼容ASCII编码并扩展到支持更多字符。Unicode编码表包含了全球几乎所有书写系统的110多万个字符,提供了一个统一的字符编码标准,支持所有语言。‌

        Unicode编码的具体实现包括将字符映射到唯一的数字代码上,这些代码可以是1到4个字节的长度,取决于字符的复杂性和所需的编码空间。例如,ASCII字符通常只需要一个字节,而更复杂的字符可能需要多个字节来表示。Unicode编码的转换工具和表可以帮助用户查询特定字符的Unicode编码,或者将Unicode编码转换回可读的字符形式。‌ 

2.转义字符

转义字符举例:

public class List05 {
    public static void main(String[] args) {
        //转义字符
        System.out.println("Hello,World");
        System.out.println("Hello\tWorld");// \t 制表符
        System.out.println("Hello\nWorld");// \n 换行
    }
}

4.布尔值扩展

public class List06 {
    public static void main(String[] args) {
        boolean flag = true;
        if (flag){
        }//老手写法
        //代码要精简易读,判断是否为真可以直接写成(flag);
        if (flag==true){
        }//新手写法
    }
}

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值