1 存储
寄存器:位于处理器内部,寄存器数量有限,需要根据需求分配,不能直接控制,程序中也看不出来使用迹象.速度最快.
堆栈:位于RAM(随机访问存储器)中,通过堆栈指针进行控制.指针下移,分配新的内存;指针上移,释放相应的内存.快速有效,仅次于寄存器.
堆:一种通用的内存池(也位于RAM),用于存放所有的java对象.堆不同于堆栈的地方:编译器不需要知道存储的数据在堆里存活多久.因此,堆里分配存储空间很灵活.缺点就是在堆里分配存储和清理可能需要更多时间.
常量存储:直接放在程序代码的内部,不会被改变.
非RAM存储:流对象和持久化对象.流对象就是通过流的形式将数据存储到服务器上.持久化对象,保存到本地的磁盘空间上.
2 基本类型
基本类型 | 大小(bits) | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
char | 16 | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8 | -128 | 127 | Byte |
short | 16 | -2^15 | 2^15-1 | Short |
int | 32 | -2^31 | 2^31-1 | Integer |
long | 64 | -2^63 | 2^63-1 | Long |
float | 32 | -2^31 | 2^31-1 | Float |
double | 64 | -2^63 | 2^63-1 | Double |
void | - | - | - | Void |
布尔类型所占空间没有具体指定,只取字面值true 或者flase
所有类型都有正负号,没有无符号的数值类型.
java SE5之后,会自动将基本类型转换成包装器类型,包装基本类型的原因:
1 基本类型不具有对象的性质,为了让其具备对象的性质,就出现了包装器类型,需要包装成对象,丰富其操作;
2 当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。
3 为了判null,比如布尔类型只有两个值 true 或 false,创建之后必然有默认值,无法判断是否为null,而包装类型可以.
高精度数字:运算速度慢,牺牲速度获取精度
BigInteger支持任意精度的整数.在运算时可以准备表示任意大小的整数而不丢失精度.
BigDecimal支持任意精度的定点数.可以用来进行货币运算.