数据类型拓展与面试题解读

整数拓展

  • 进制:在平时咱们生活中经常见到的例如通用于电脑识别的二进制、咱们生活中常用的十进制工作中常见的八进制与十六进制
    • 二进制:通常会以0b开头
    • 十进制:咱们生活中的数字
    • 八进制:通常以0开头
    • 十六进制:通常以0x开头

图片

浮点数拓展 (float、double)

  • 试题举例

    • 银行业务中‘钱’的表示方式

      • 在银行处理业务时,钱肯定是不能给算错的,那么当我们在同时使用使用floatdouble时是存在问题的

        例如我们使用一下两种浮点数类型去做比较时

        图片

        我们来看它的比较结果

        图片

        咱们再次使用同类型浮点数进行对比

        图片

        我们再来看一下它们的对比结果

        图片

        这个时候是不是很多同学很奇怪,为什么上面的本该打印出true的却打印出false,而本该打印出false的却反而打印出true呢?

        • 其实呢,咱们float类型的浮点数它能表现的字长是限的,但是咱们知道,有些东西它们得出来可以是无限的。可是呢,他是有限的,也是离散的。它们是有这样一个区别的,浮点数都会存在一个舍入误差的东西,咱们都知道它会四舍五入但由于很多数字没办法精确的表示,结果只能是一个大约数。咱们小学都学过约等于它只是接近但是不等于所以它们在比较中是有问题的。由此,可以得出一个结论:最好完全避免使用浮点数进行比较
      • 那么回到咱们原本的问题:银行业务中‘钱’怎么表示呢?

        由上我们已经知道,我们不使用浮点数去比较,那么我们还可以使用一个类去比较。咱们先记住这个类,它的名字叫做BigDecimaL (数学工具类、大数类型)。咱们Java里面会有很多很多这样自定义好的类,咱们都可以拿来使用。咱们只需要知道,银行业务不能使用float来表示了,我们只需要使用BigDecimaL这个类来表示 (如果你需要计算且不能有误差,咱们就可以使用咱们Java写好的类BigDecimaL就可以了)

字符拓展

  • 咱们先来输入一段代码

    图片

    咱们可以看到图中c1c2的第二段打印代码前面都有一个'(int)',它是用来给咱们的字符强制转换为int类型 (并不是所有东西都可以强制转换的,但是这里是可以的),咱们先来看一下打印结果

    图片

    咱们可以看到,图中打印出的a和中都没有问题,但是97和20013这两串数字是什么东西呢?他就是咱们使用int强制转换得出的结果,所以我们可以得出一个结论:所有的字符本质还是数字

    • 关于Unicode

      • 由上我们通过单引号('a'或'中')来表示字符常量没有任何问题,但是这个char类型它会涉及到一个编码问题,它就是Unicode编码它的作用是处理各种语言的文字,在字节表示中占用了2个字节,在早些年的时候它最终可以表示0~65536个字符,现在的话可以表示的字符更多了。相信大家都知道Excel表格,它最长只有2的16次方,既是65536

      • 为什么说所有的字符本质还是数字呢?是这样的,字符的本身是数字通过char变成了各种字符,因为在Unicode中有一个编码表,在这个表中,有很多数字例如数字1等于某个字符,咱们上图打印中97等于a、20013等于中,在Unicode内正是这么表示的。如下图

        图片

        打印如下

        图片

        因此,在Unicode表中65代表大写A,无论是转换与否,它都会去查这样一张表,这个表内有非常多的东西包括我们的中文,因此字符本质上还是数字

    • Unicode转译

      • 由上得知,所有字符都会通过一个Unicode编码进行表示,而它们是怎么表示的?

        举例一个格式:U0000~UFFFF,这是它的区间范围。咱们来打印一个字符方便大家去理解,如下图

        图片

        打印如下

        图片

        • 这时候就会有人问了,a的转译表示为什么不是\u0097或者是\u97,而是出乎意料的\u0061呢?关于这个问题,咱们可以打开计算器计算一下97的十六进制编码是否就是0061,所以在Unicode中转译的进制编码为十六进制

        以上的底层原理大家了解一下就可以了,以防面试时被问到。实际使用中咱们只需要用到下图表示即可

        图片

常见转义字符

  • 制表符 (\t)

    图片

    图片

  • 换行符(\n)

    图片

    图片

  • ...(以上只是举例,更多转义字符可以在网络中查到)

posted @ 2024-02-28 19:38  阿俊学JAVA  阅读(2)  评论(0编辑  收藏  举报