数据类型
基本数据类型
1、数值型
(1)整数类型:byte、short、int、long
(2)浮点类型:float、double
2、字符型:char
3、布尔型:boolean
引用数据类型:如,class、interface、数组等
整数类型 | 占用存储空间 | 范围 |
byte(字节) | 1 字节 | -27 ~ 27-1 |
short(短整型) | 2 字节 | -215 ~ 215-1 |
int(整型) | 4 字节 | -231 ~ 231-1 |
long(长整型) | 8 字节 | -263 ~ 263-1 |
1、Java 整数类型有固定范围、字段长度,不受操作系统影响,保证可移植性
2、Java 整数常量类型默认为 int
3、声明为 long 需要在数值后加上“l”或“L”
4、1 byte = 8 bit
浮点类型 | 占用存储空间 | 范围 |
float(单精度) | 4 字节:1 位(符号位)+11 位(指数位)+52 位(尾数位) | [-3.4 * 1038, -1.18 * 10-38] ∪ [1.18 * 10-38, 3.4*1038] |
double(双精度) | 8 字节:1 位(符号位)+8 位(指数位)+23 位(尾数位) | [-2.23 * 10-308, 1.80 * 10308] ∪ [1.80 * 10308, 2.23 * 10-308] |
1、浮点数 = 符号位 + 指数位 + 基数位 + 尾数位
(1)实际的数据中往往不考虑基数(一般为 2),只用符号、尾数、指数这三部分即可表示浮点数,
(2)符号部分:使用一个数据位来表示数值的符号,该数据位是 1 时表示负,为 0 时则表示“正或 0”
(3)数值的大小用尾数部分和指数部分来表示。例如,小数就是用“尾数部分 * 2 的指数部分次幂”这样的形式来表示
(4)尾数部分:将小数点前面的值固定为 1 的正则表达式
(5)指数部分:EXCESS 系统表现
2、小数都是近似值,尾数部分可能丢失,造成精度损失
3、Java 浮点类型有固定范围、字段长度,不受操作系统影响,保证移植性
4、Java 浮点常量类型默认 double
5、声明 float 需要在数值后加上“f”或“F”
6、表示形式,必须带小数点
(1)十进制:5.12、5.120f、0.512 <=> .512
(2)科学计数法:5.12e2 <=> 512.0、5.12e-2 <=> 0.0512
7、当运算结果为小数,进行相等判断时,应以两个数差值的绝对值,在某个精度范围内判断
double result = 8.1 / 3;
System.out.println(result);//2.6999999999999997
8、尾数部分
(1)将小数点前面的值固定为 1 的正则表达式
(2)把二进制数表示的小数左移或右移(这里是逻辑移位。因为符号位是独立的)数次后,整数部分的第 1 位变为 1,第 2 位之后都变为 0(为了消除第 2 位以上的数位)
(3)第 1 位的 1 在实际的数据中不保存,由于第 1 位必须是 1,因此,省略该部分后就节省了一个数据位,从而也就可以表示更多的数据范围
(4)单精度浮点数尾数部分的正则表达式(例)
9、指数部分
(1)使用 EXCESS 系统主要是为了表示负数时不使用符号位
(2)EXCESS 系统表现:通过将指数部分表示范围的中间值设为 0,使得负数不需要用符号来表示、
(3)当指数部分是 8 位单精度浮点数时,最大值 11111111 = 255 的 1 / 2,即 01111111 = 127(小数部分舍弃)表示的是 0
(4)当指数部分是 11 位双精度浮点数时,11111111111 = 2047 的 1 / 2,即 01111111111 = 1023(小数部分舍弃)表示的是 0
(5)举例说明:假设用 1~13(A~K)的扑克牌来表示负数,这时可以把中间的扑克牌 7 当成 0。如果扑克牌 7 是 0,10 就表示 +3,3 就表示 -4
10、例
(1)十进制数:0.75
(2)单精度浮点数表示:0 - 01111110 - 10000000000000000000000(破折号是为了区分符号部分、指数部分、尾数部分)
(3)符号部分:0
(4)指数部分:01111110
(5)尾数部分:10000000000000000000000
(6)因为 0.75 是正数,所以符号位是 0
(7)指数部分 01111110 的十进制数是 126,用 EXCESS 系统表现就是 -1(126 - 127 = -1)
(8)根据正则表达式的规则,小数点前面的第 1 位是 1,因此尾数部分 10000000000000000000000 实际上表示的是 1.10000000000000000000000 这个二进制数
(9)将尾数部分的二进制数转换成十进制数,结果就是 1 * 20 + 1 * 2-1 = 1.5
(10)因此,0 - 01111110 - 10000000000000000000000 这个单精度浮点数,表示的就是 +1.5 * 2-1 = +1.5 * 0.5 = +0.75
布尔类型
1、只允许取值 true、false,没有 null
2、占用存储空间:1 byte
3、适用于逻辑运算,控制程序流程
4、不可以用 0、非 0 整数代替 false、true
字符类型
1、字符常量用单引号括起来的单个字符
2、占用存储空间:2 byte
3、Java 中允许转义字符 '\' 将其后字符转变为特殊字符型常量
4、char 本质是一个整数,有对应 Unicode 码
(1)默认输出 char 时,是 Unicode 码对应的字符
(2)直接给 char 赋一个整数,输出对应 Unicode 字符
(3)若要输出对应数值,可以强制转换类型
(4)char 类型可以进行运算,相当于一个整数
5、字符、码值对应关系是字符编码表规定的
6、字符储存到计算机,将字符对应码值找出
(1)存储:'a' -> 码值 97 -> 二进制 1100001
(2)读取:二进制 1100001 -> 码值 97 -> 'a'
字符编码表
1、ASCII:一个字节表示一个字符,只占用后 7 位,首位规定为 0,共 128 个字符,实际一个字节可以表示 256 个字符
2、Unicode:两个字节表示一个字符,字母、汉字统一占用两个字节,兼容ASCII码
3、UTF-8:使用最广,可变长度字符编码,可用 1 - 6 字节表示字符,根据不同字符变化字节,字母使用一个字节,汉字使用三个字节
4、GBK:字母使用一个字节,汉字使用两个字节
5、GB2312:可表示汉字数量小于 GBK
6、Big5:可表示繁体中文
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战