Java类型,基本类型,引用类型--个人记录的复习笔记.希望与大家共同进步
1.java基本类型共八种
1.1int
int为整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,648到2,147,483,647,在变量初始化的时候
int类型的默认值为0。
1.2short
short也属于整数类型,在存储的时候,用2个字节存储,范围为-32,768到32,767。
short类型的默认值为0。
1.3long
long也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,808到9,223,372,036, 854,775,807。
long类型的默认值为0L或0l,也可直接写为0。
1.4byte
byte同样属于整数类型,在存储的时候,用1个字节来存储,范围为-128到127。
byte类型的默认值也为0。
1.5float
float属于浮点型,在存储的时候,用4个字节来存储,范围为32位IEEEE 754单精度范围。
float的默认值为0.0f或0.0F,在初始化的时候可以写0.0。
1.6double
double同样属于浮点型,在存储的时候,用8个字节来存储,范围为64位IEEE 754双精度范围。
double的默认值为0.0。
1.7char
char属于字符类型,在存储的时候用2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是Unicode的字符范围。
char类型的默认值为'u0000'。
1.8boolean
boolean属于布尔类型,在存储的时候不使用字节,仅仅使用1位来存储,范围仅仅为0和1,其字面量为true和false。
boolean变量在初始化的时候变量的默认值为false。
总结
基本类型 | 大小 | 最小值 | 最大值 | 默认值 |
---|---|---|---|---|
int | 32 bits(4字节) | -2^31 | 2^31-1 | 0 |
short | 16 bits(2字节) | -2^15 | 2^15-1 | (short)0 |
long | 64 bits(8字节) | -2^63 | 2^63-1 | 0L |
byte | 8 bits(1字节) | -128 | 127 | (byte)0 |
float | 32 bits(4字节) | IEEE754 | IEEE754 | 0.0F |
double | 64 bits(8字节) | IEEE754 | IEEE754 | 0.0D |
char | 16-bit(2字节) | Unicode 0 | Unicode 2^16-1 | ‘\u0000’(Unicode 0) |
boolean | – | – | – | false |
2.java封装类(JDK1.5特性)
基本类型 | 封装类型 |
---|---|
int | Integer |
short | Short |
long | Long |
byte | Byte |
float | Float |
double | Double |
char | Character |
bollean | Boolean |
3.类型转换
3.1.基本类型转换为字符串有三种方法:
3.1.1. 使用包装类的 toString() 方法
3.1.2. 使用String类的 valueOf() 方法
3.1.3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
3.2.将字符串转换成基本类型有两种方法:
3.2.1. 调用包装类的 parseXxx 静态方法
3.2.2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
3.3.基本类型的隐式转换
隐式转换也叫作自动类型转换, 由系统自动完成.
从存储范围小的类型到存储范围大的类型.
byte ->short(char)->int->long->float->double
例: int a = 1;
double b = a;
3.4.基本类型的显示转换
显示类型转换也叫作强制类型转换, 是从存储范围大的类型到存储范围小的类型.
当我们需要将数值范围较大的数值类型赋给数值范围较小的数值类型变量时,由于此时可能会丢失精度,因此,需要人为进行转换。我们称之为强制类型转换。
double→float→long→int→short(char)→byte
例: double b = 1.0;
int a = (int)b;
3.5.补充
Java语言和解释器限制使用强制和转换,以防止出错导致系统崩溃。整数和浮点数运算符间可以来回强制转换,但整数不能强制转换成数组或对象。对象不能被强制为基本类型。
Java中整数运算符在整数运算时,如果操作数是long类型,则运算结果是long类型,否则为int类型,绝不会是byte,short或char型。这样,如果变量i被声明为short或byte,i+1的结果会是int。如果结果超过该类型的取值范围,则按该类型的最大值取模。
3.5.自动拆装箱(基本类型与包装类的转换)
JDK1.5的一个新特性是自动装箱和自动拆箱。
3.5.1.自动装箱
基本类型就自动地封装到与它相似类型的包装中,如:Integer i = 100;
本质上是,编译器编译时自动添加:Integer i = new Integer(100);
3.5.2.自动拆箱
包装类对象自动转换成基本数据类型。如:int a = new Integer(100);
本质是上,编译器编译时自动添加:int a = new Integer(100).intValue();
4.引用类型
4.1强引用(Strong Reference)
即使进行了多次的GC回收,即使JVM真的已经不够用了,即使JVM最终不得已抛出了OOM错误,那么该引用继续抢占;
4.2软引用(Soft Reference)
当内存空间不足时,可以回收此内存空间。如果充足则不回收,可以用其完成缓存的一些处理操作开发。
缓存:保证数据更快的操作(读取)。是不重要的数据。可以作为牺牲来释放空间。
4.3弱引用(Weak Reference):
不管内存是否紧张,只要一出现GC处理,则立即回收。
4.4幽灵引用(虚引用)(Phantom Reference):
和没有引用是一样的。
比如HashMap根据key取得值,设置key值为null和不设置key值的效果是一样的。
tips:
引用类型个人觉得写的比较好的:https://blog.csdn.net/KevinMite/article/details/83745080