数据存储
有5个不同的地方可以存储数据:
- 寄存器(Registers)最快的存储区域,位于CPU内部。寄存器数量十分有限,所以寄存器根据需求进行分配,对其没有直接的控制权,也无法在自己的程序里找到寄存器存在的踪迹。
- 栈内存(Stack)存在于常规内存 RAM(随机访问存储器,Random Access Memory)区域中,可通过栈指针获得处理器的直接支持。栈指针下移分配内存,上移释放内存。这是一种仅次于寄存器的非常快速有效的分配存储方式。创建程序时,Java 系统必须知道栈内保存的所有项的生命周期。这种约束限制了程序的灵活性。因此,虽然在栈内存上存在一些 Java 数据(如对象引用),但 Java 对象本身的数据却是保存在堆内存的。
- 堆内存(Heap)这是一种通用的内存池(也在 RAM 区域),所有 Java 对象都存在于其中。与栈内存不同,编译器不需要知道对象必须在堆内存上停留多长时间。因此,用堆内存保存数据更具灵活性。创建一个对象时,只需用 new 命令实例化对象即可,当执行代码时,会自动在堆中进行内存分配。
- 常量存储(Constant storage)常量值通常直接放在程序代码中,因为它们永远不会改变。如需严格保护,可考虑将它们置于只读存储器 ROM (只读存储器,Read Only Memory)中。
- 非RAM存储(Non-RAM storage)数据完全存在于程序之外,在程序未运行以及脱离程序控制后依然存在。两个主要的例子:(1)序列化对象:对象被转换为字节流,通常被发送到另一台机器;(2)持久化对象:对象被放置在磁盘上,即使程序终止,数据依然存在。这些存储的方式都是将对象转存于另一个介质中,并在需要时恢复成常规的、基于 RAM 的对象。Java 为轻量级持久化提供了支持。而诸如 JDBC 和 Hibernate 这些类库为使用数据库存储和检索对象信息提供了更复杂的支持。
基本数据类型
分类:四类八种
- 整型(数值型):byte(8bit)、short(16位)、int(32位)、long(64位)
- 浮点型(数值型):float(32位)、double(64位)
- 字符型:char(16位)
- 布尔型:boolean
- 注意:String不是基本类型,它是个对象是引用类型。
(基础类型只表示简单的字符或数字,引用类型可以是任意复杂的数据结构)
详细介绍
byte
8位、有符号的以二进制补码表示的整数
min : -128(-2^7)
max: 127(2^7-1)
default: 0
对应包装类:Byte
short
16位、有符号的以二进制补码表示的整数
min : -32768(-2^15)
max: 32767(2^15 - 1)
default: 0
对应包装类:Short
int
32位、有符号的以二进制补码表示的整数
min : -2,147,483,648(-2^31)
max: 2,147,483,647(2^31 - 1)
default: 0
对应包装类:Integer
long
64位、有符号的以二进制补码表示的整数
min : -9,223,372,036,854,775,808(-2^63)
max: 9,223,372,036,854,775,807(2^63 -1)
default: 0
对应的包装类:Long
float
单精度、32位、符合IEEE 754标准的浮点数
float 在储存大型浮点数组的时候可节省内存空间
浮点数不能用来表示精确的值,如货币
default: 0.0f
对应的包装类:Float
double
双精度、64位、符合IEEE 754标准的浮点数
浮点数的默认类型为double类型
double类型同样不能表示精确的值,如货币
default: 0.0d
对应的包装类:Double
char
char类型是一个单一的 16 位 Unicode 字符
最小值是 \u0000(即为0)
最大值是 \uffff(即为65,535)
char 数据类型可以储存任何字符
对应的包装类:Character
boolean
boolean数据类型表示一位的信息
只有两个取值:true 和 false
这种类型只作为一种标志来记录 true/false 情况
对应的包装类:Boolean
单位换算
-
Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范畴;
Byte意为“字节”,是计算机文件大小的基本计算单位;1B=8bit:一个字节占8位 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB