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


浮点数
注意事项

常见问题

按理来说,应该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个字节
小数的优先级是要比整数高的。
转换示例

这时报错,显示我们需要一个byte类型,但是你给了一个int类型
所以我们需要把a转换成byte类型,即在a前加(byte)即可。

输出一下

发现输出的居然是-128,这是因为内存溢出了。
byte类型输出范围是 -128-127 。
128比127大,所以无法输出。我们需要避免这种情况的发生!!!
类型转换格式
- 从高到低我们就需要强制类型转换
即(类型)+变量名
- 从低到高就是自动类型转换
即不用操作

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


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/

浙公网安备 33010602011771号