第六天的学习--整数拓展、浮点数、字符拓展(强转、转义字符)、布尔值拓展、类型转换

第六天的学习

整数拓展

进制

浮点数

注意事项

常见问题

按理来说,应该d1=d2,d3≠d4,但事实上呢?

可以很清楚的看到,分割线下的结果完全不同。

所以我们最好完全避免使用浮点数来进行比较!!!

字符拓展

强制类型转换

在输出的括号里加上(int),就把类型转换了。输出结果如下:

这里可以得到,在Unicode编码表里,a=97,夏=22799

所有的字符本质上还是数字。

反过来,我们也可以输出“a”,如下图:

这里\u0061才能输出a,因为是十六进制,97十六进制后就是61。

同理,夏这个22799,需要\u590f才能输出。

转义字符

  • \t 代表水平制表符
  • \n 代表换行

提示:所有的=========,都是我输出的,当做分隔线用的。

拓展知识--从内存来分析对象

之后再仔细研究吧。

布尔值扩展

类型转换

低到高分别是

  • byte 1个字节范围

  • short 2个字节范围

  • char 2个字节

  • int 4个字节范围

  • long 8个字节范围

  • float 4个字节

  • double 8个字节

小数的优先级是要比整数高的

转换示例

转换示例1

这时报错,显示我们需要一个byte类型,但是你给了一个int类型

所以我们需要把a转换成byte类型,即在a前加(byte)即可。

转换示例1更正

输出一下

转换示例1更正输出

发现输出的居然是-128,这是因为内存溢出了。

byte类型输出范围是 -128-127

128比127大,所以无法输出。我们需要避免这种情况的发生!!!

类型转换格式

  • 从高到低我们就需要强制类型转换

​ 即(类型)+变量名

  • 从低到高就是自动类型转换

​ 即不用操作

转换示例2

这时再输出一下,就可以发现数字正常了。

转换示例2表达

转换示例2输出

128.0是因为 double 是小数。

  • 补充例子

补充

因为char比int小,所以在赋值的时候用不着强转。

这时如果直接输出(f),则会出现98,因为a是97(上文有提到)。

如果在输出时强转一下,把本来属于int的转为char,则会出现b,因为a的下一位就是b。

注意点

注意点

内存溢出上文提到了,下面再给一个例子:

当操作比较大的数的时候,需要注意溢出问题!

大数字示例

这里是因为int的输出范围是21亿多,200亿自然是超过了

那如果把total前的int改为long呢?

大数字示例改

结果毫无变化。

这是因为计算时默认是int,所以先算成int,计算完之后才变成long类型,转换前就已经存在问题了,所以这样做不行。

这时候就不仅需要改成long,在输出时还需要把money改为long类型(改了money,就不用改years,反之同理)。

大数字示例最终改

操作数1 操作数2 转换后的类型
byte 、short、int byte 、short、int int
byte 、short、int long long
byte 、short、int、long float float
byte 、short、int、long、float double double
char int int

再强调一次:如果在long类型里的数字,后面要加上大写的L

精度问题如下:

精度问题

以上所有学到的知识,除小部分我自行百度外,其余全是从B站UP遇见狂神说那里学习得来的。
非常良心的一位UP,Java课程全部免费,大家快去关注他!!!
对了,他还自建了一个学习网站,课程全部免费,链接就在这里,一起来学习吧!!!https://www.kuangstudy.com/

posted @ 2021-02-06 17:25  夏陌夏  阅读(144)  评论(0)    收藏  举报