思维导图
需要全部思维导图的点赞并且评论区回复“思维导图”
数据类型
字符类型
String
- 能保存多个字符,可以保存空字符
- 字符串拼接:两个字符串要使用+ 进行拼接
- 用双引号""保存
char
- 仅保存单个字符,且不可以保存空字符
- 底层保存的是数字
- 用单引号''保存
String与char都可以保存转义字符
//常见标识符
'\'' //单引
'\\' //反斜杠
'\t' //制表符
'\n' //换行
整数类型
byte
长度:1个字节
取值范围:-2^7~(2^7-1)—>-128~127
short
长度:2个字节
取值范围:-2^15~(2^5-1)
int
长度:4个字节
取值范围:-2^31~(2^31-1)
long
长度:8个字节
取值范围:-2^63~(2^63-1)
浮点型
float(单精度浮点数)
double(双精度浮点数)
布尔型
boolean
数据范围
byte—>short—>int—>long—>float—>double
数据类型互相转换
自动类型转换
小——>大
范围大的数据类型变量 = 范围小的数据类型值
long->float时,当数据值过大
(如:超过1千万时),会造成中部分数据丢失(建议直接long—>double)
强制类型转换
大——>小
范围小的数据类型变量 = (范围小的数据类型)范围大的数据类型值
注意强类型转换可能造成数据溢出(丢失)
丢失可能
1、小数位丢失
2、高位数据丢失
3、数据位被转化为符号位
数据保存在哪里
1、寄存器
寄存器是速度最快的数据存储方式,数据直接保存在中央处理器,然而寄存器的数量是有限的,所以只能按需分配。
JVM中有4种常见的寄存器:
- pc程序寄存器
- optop操作数栈顶指针
- frame当前执行环境指针
- vars指向当前执行环境中第一个局部变量的指针
所有寄存器都为32位。
pc用于记录程序的执行,optop,frame和vars用于记录指向Java栈区的指针。
2、栈
数据存储在随机存取存储器里,处理器可以通过栈指针直接操作该数据。具体来说,栈指针向下移动将申请一块新的内存,向上移动则会释放这块内存。这是一种及其迅速和高效的内存分配方式,其效率仅次于寄存器。只不过Java系统在创建应用程序时就必须明确栈上所有对象的生命周期。这种限制约束了程序的灵活性,因此虽然有一些数据会保存在栈上,对象本身却并非如此。
3、堆
堆是一个通用的内存池,用于存放所有Java对象,new出来的对象都存放在堆中。堆内存的分配和清理要比栈存储话费更多的时间。
4、常量存储
常量通常会直接写在程序代码中,不可变。
5、非RAM存储
不保存在应用程序里的数据,最典型的例子就是序列化对象,它指的是转换为字节流并可以发送到其它机器的对象。另一个例子则是持久化对象,它指的是保存在磁盘上的对象。也支持使用数据库存储对象信息。
大多数微处理芯片有额外的缓存内存,只不过缓存内容使用的是传统的内存管理方式,而非寄存器。
一个例子是字符串常量池,所有字符串和字符串常量都会被自动放置到这个特殊的存储空间中。
特殊情况 -> 原始类型
原始类型是直接创建一个“自动变量”,不是引用,该变量直接在栈上保存它的值,运行效率更高。