java基本类型有八种,其中可以分为三种:
- 字符类型:char
- 布尔类型:boolean
- 整数类型:byte,short,int,long
- 浮点数:float,double
ps:java对于类型范围溢出没提示,而且string属于特殊字符串类型
类型 | 字节单位(1字节范围为2-7~(27-1)) |
---|---|
boolean,byte | 1 |
short,char | 2 |
int,float | 4 |
long,double | 8 |
java自动装箱和拆箱
概述:把基本类型打包成包装类称为装箱(boxing),把包装类拆装成基本类型称为拆箱(unboxing)
包装类的作用:把基本类型打包成面向对象的类,因为某些类或方法等,不能使用基本类型只能使用对象,如集合类,所以在java中有一些方法可以把基本类型装箱。
java自动装箱方法:
// 直接声明包装类型
Integer i = 10;
// 使用包装方法
int i = 10;
Integer.value(i);
类型 | 包装类名 |
---|---|
int | Integer |
char | Charater |
boolean | Boolean |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
java自动拆箱方法:
// 使用包装类内自带的拆箱方法invalue();
Integer i = 10;
int b = Integer.invalue(i);
包装类缓存机制
当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128—-127的范围内,如果满足条件,则会从缓存(常量池)中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。用这种方法去降低内存使用率。
Integer a = 100;
Integer b = 100;
System.out.println(a==b); // true
System.out.prinln(a.equal(b)); // true
Integer a = 133;
Integer b = 133;
System.out.println(a==b); // false
System.out.prinln(a.equal(true)); // false
第一个a==b为true,因为数值没有超过127,所以a包装类创建后缓存了,b后创建于a一样的数值,所以b对象引用为a的对象
第二个a==b为false,数值超过127,所以并没有进行缓存,所以a==b为false
ps:包装类比较均使用equal()方法对比,不能使用==。否则只要不是缓存相同对象,无论数值是否相等,均为false。