数据类型拓展

浮点数拓展

浮点数类型有舍入误差,精确计算时会四舍五入。

例1:

public class Demo01{
    pubilc static void main(String[] args){
        
        float f = 0.1f;
        double d = 0.1/10;
        
        System.out.println(f);//返回值为0.1
        System.out.println(d);//返回值为0.1
        System.out.println(f==d);//返回值为false
    }
}

例2:

public class Demo02{
    pubilc static void main(String[] args){
        
        float f = 2323232323232323f;
        double d = f+1;
        
        System.out.println(f);//返回值为2.32323237E15
        System.out.println(d);//返回值为2.32323236757504E15
        System.out.println(f==d);//true
    }
}

从以上例子分析,例1返回值明显相等,判断相等时却返回false,例2返回值明显不相等,返回值却是true。

由此得出结论浮点数类型在判断值时会有舍入误差,值较大或较小时会计算大约数,所以根据特性在计算对精度要求较高的项目时不要使用浮点数类型

解决方法:在要求高精度计算时使用BigDecimal进行计算,BigDecimal是一个数学工具类。

字符拓展

例3:

public class Demo03{
    public static void main(String[] args){

        char f = '王';
        char d = 'W';

        System.out.println(f);//返回值为:王
        System.out.println((int)f);//返回值为:29579
        System.out.println(d);//返回值为:W
        System.out.println((int)d);//返回值为:87

    }
}

从例3分析,将cher类型强制转换成int类型后,输出结果为数字,由此我们可得结论字符类型实际上在本质上还是数字。

原理:字符统一由 Unicode 表 从数字转换成字符。

转义字符

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\

代表一个反斜线字符'''

092

'

代表一个单引号(撇号)字符

039

"

代表一个双引号字符

034

?

代表一个问号

063

\0

空字符(NUL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

十六进制所代表的任意字符

十六进制

定义:转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列。—摘自百度百科