day9.数据类型扩展以及面试题讲解

数据类型扩展以及面试题讲解

今天的内容极为重要,请认真学习

昨天大家学习了数据类型,如果数据类型学好了后,先给大家讲解一些常见的问题,没学好的同学是没要认真学完在来看,基础没打扎实就开始建楼,那是不是很容易垮掉所以请大家认真学习

今天要讲解的是数据类型常见的一些问题,或者说是面试题的讲解


整数扩展

我们都只到在计算机内都有一些进制算法:什么二进制八进制,而在我们的java程序中也是可以表示的

二进制(0b):以0b开头的计算机进制

十进制:我们生活中常用到的

八进制(0)十六进制(0x),以00x 表示,在工作中可能遇到的

通过 sout的输出可以得出这些进制的数字
在这里插入图片描述

大家有没有发现一个规律,十进制输出的10就是10,而八进制输出的10,却是8,十六进制的是16,本质上是一样的,十进制是逢十进一,八进制就是缝八进一,十六进制就是缝十六进一

那以这样的本质,十六进制就是x,到后面,是不是0-9 A-F,那十六进制的11是不是就17了,道理都是一样的

(这一段没听大懂,不知道怎么表达)

以上是整数类型的拓展,整数拓展完是不是还有浮点数和字符呀,不急我们一个一个来,

浮点数拓展

浮点数就是小数,浮点数不是有两个关键字:floatdouble,这两个关键字是有问题的进了公司是不能用这两个计算的,给大家演示一下

我们给这两种类型个附一个值,一个**(0.1),一个(1.0/10),两者都等于0.1**,,然后我们再用sout的公式,用两个等号来判断两者是否相等,再单独输出两者,看看会有什么结果,

在这里插入图片描述

我们可以看到两者输出的都是0.1,但是上面的false很显眼,那两者输出的都是0.1,为什么会不相等呢?

我们进入调试里看看,点击这串代码前面的红圆,然后点击右上角的昆虫图标,进入调试

在这里插入图片描述

可以看到进入调试后,看到两者都等于0.1,那这是怎么回事呢,那关掉调试模式,

我们再输入一串代码,这次用float,变量为d1,随便设个长一点的值,然后在下面设个 d1+ 1 ,再看他们是否相等,看看会怎么样

在这里插入图片描述

可以看到,d1是我随便打出很长的数字,但是d1+1还等于d1本身,但下面显示的是true,还是等于他本身,可以看到这个浮点数是有问题的,

告诉这背后的原因,这个浮点数能表达的字长是有限的,但是数字是无限的,浮点数既然是有限的,但它也是离散的,但也是有区别的,浮点也有舍入误差,就是四舍五入的那种,这么长的数没有办法精确表示,所以它的结果是个大约数,跟小学学过的约等数是一样的,这个结果是约等于,由于数字过长,d1只能约等于d2,接近但不等于

所以得出的结论是:最好完全避免使用浮点数进行比较,这句话一定记牢,既然不用浮点数来表示那应该用什么表示呢?,到后面我们会学到一个类叫BigDecimal

字符扩展

昨天学过的字符类型,用 char表示,只能代表一个字符,不管是中文还是符号,英文,都是一个字,这样是没有任何问题的,

但是有个叫强制转换,在量值前面加个int,就可以强行改变它的输出结果,但不是所有东西都可以强行转换的,但这个字符拓展是可以的,看看结果,

在这里插入图片描述

我们可以看到,输出我们的a两个字是没有问题的,但是在他们前面加个int后,a就变成了97,而这个字就变成了20013,加上int后都变成了数字,

所以所有字符的本质还是数字

通过单引号表示字符常量是没有任何问题,但是这个char类型会涉及到一个编码的问题,编码内有个Unicode,这个东西可以处理各种语言的文字,最多可以表示65536个数字,在早期的Excel,里它能表达的数字是2的16次方,就等于65536,到现在,Unicode等表达的是远远不至这么少的

在Unicode里是有一张表格,里面就有 97表示a20013表示中

讲那么多还不如直接实际操作一波,

Unicode中也有个转译的编码,比如有:U000 = UFFFF,来用数字表达文字,我们试着输出一下

在这里插入图片描述

可以看到我用转译编码输出的**\u0061变成了a**,里面都是由Unicode的编码的,但是我们能正常写就正写吧,那样写很麻烦的

这些都是底层的原理,如果面试被问到了这个问题,就可以跟面试官讲出来,

转译字符 \t

这个转译字符跟Unicode很像,

先写个sout,输出个**(hello , world)**,这时候回想Unicode,这逗号是不是也可以有一个东西来代替呀,这个叫转译字符,

在这里插入图片描述

可以看到,逗号原本在的那个位置换成了**\t 和 \n**,他们分别表示空格和换行,这种转译字符在网上有,大家可以自行去寻找


以上就是数值类型的拓展,现在给大家讲个骚操作,看不懂没关系以后会学到,这里就是给大家预告一下后面要学的东西

String sa = new String("Hello World");
        String sb = new String("Hello World");
        System.out.println(sa==sb);

        String sc = "Hello World";
        String sd = "Hello World";
        System.out.println(sc==sd);

我们试着运行这串代码

在这里插入图片描述

大家可以看到两个“helloworld”进行比较,得出来的结果,上面的是不相等的,下面的是相等的,大家可以思考一下为什么,等学到对象的是给大家分析一下从内存分析


布尔值扩展

我们生活中都需要判断是非对错,如果这条路是对的那我们走下去,如果是错的那我们就不走了,而扩展的也是这个内容,

我们先写个布尔值为true,,再给他设个“如果”用“if”判断

在这里插入图片描述

如上大家看到,第一行写的是,Boolean,表示flag=true

第二行的 if 就是如果,如果flag=true那要执行什么代码,就是这么个意思,

那第三行, if(flag)的意思和第二行是一样的,有些新手怕自己写错,就加个flag=true,会更保险一点,等写得熟练了,直接写个flag就行了,

而等到你们到了大佬级别就再也看不到第二条这种的代码了,因为有这么一句话是,Less is more! 代码要精练易懂,因为一些大型的开源代码都是要这么简洁的,但是作为新手,还是强烈建议使用第二行的方式,等熟练了再换.

今天的内容极为重要学不懂的一定要反复观看视频,直至自己明白

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值