基本数据类型
Java中有八种内置的基本数据类型,分别是byte、short、int、long、float、double、char和boolean类型。其中
基本数据类型 | 所占字节数 |
byte | 1个字节 |
short | 2个字节 |
int | 4个字节 |
long | 8个字节 |
float | 4个字节 |
double | 8个字节 |
char | 2个字节 |
boolean | 视情况而定,可能是1个字节,也可能是4个字节 |
注意,字节数可能会因为不同的JVM而有所不同。
注意,使用Oracle Jdk的时候,当boolean类型单独使用时:
boolean b = true;
此时b是占4个字节的。这是由于在JVM编译中,它被当作int类型进行了处理,所有占4个字节
当boolean以数组形式存在时,此时是占一个字节,同样是在JVM编译中,被当作成byte类型处理。
这八个基本数据类型,都有对应的包装类:
基本数据类型 | 包装类型 |
btye | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
基本数据类型转换为对应的包装类
//int类型转换为Integer类型
int i = 100;
Integer integer = new Integer(i);
//double类型转换为Double类型
double d = 15.0;
Double doubleObject = new Double(d);
//boolean类型转换为Boolean类型
boolean b = true;
Boolean booleanObject = new Boolean(b);
//byte类型转换为Byte类型
byte bt = 1;
Byte byteObject = new Byte(bt);
//short类型转换为Short类型
short s = 10;
Short shortObject = new Short(s);
//long类型转换为Long类型
long l = 100000L;
Long longObject = new Long(l);
//类型转换为Float类型
float f = 10.0f;
Float floatObject = new Float(f);
//char类型转换为Character类型
char c = 'a';
Character characterObject = new Character(c);
对应包装类转换为基本数据类型
//int类型转换为Integer类型
int i = 100;
Integer integer = Integer.valueOf(i);
//double类型转换为Double类型
double d = 15.0;
Double doubleObject = Double.valueOf(d);
//boolean类型转换为Boolean类型
boolean b = true;
Boolean booleanObject = Boolean.valueOf(b);
//byte类型转换为Byte类型
byte bt = 1;
Byte byteObject = Byte.valueOf(bt);
//short类型转换为Short类型
short s = 10;
Short shortObject = Short.valueOf(s);
//long类型转换为Long类型
long l = 100000L;
Long longObject = Long.valueOf(l);
//float类型转换为Float类型
float f = 10.0f;
Float floatObject = Float.valueOf(f);
//char类型转换为Character类型
char c = 'a';
Character characterObject = Character.valueOf(c);
除此之外,从Java5开始添加了自动装箱和自动拆箱,可以自动将基本数据类型转换为对应的包装类或者反过来:
//自动装箱
Integer integer = 100;
Double doubleObject = 15.0;
Boolean booleanObject = true;
Byte byteObject = 1;
Short shortObject = 10;
Long longObject = 100000L;
Float floatObject = 10.0f;
Character characterObject = 'a';
//自动拆箱
Integer integer = 100;
int i = integer;
自动拆箱虽然很好用,但是有些情况会带来一些问题:
1.空指针异常
当你的包装类的对象为null时,进行自动拆箱的时候就会抛出空指针异常
2.数值比较问题
对于包装类型的对象,拿int和Integer来进行说明,不能简单的使用==进行比较。因为对于-128到127之间的整数,Java会使用缓存的对象,所以==可以正确比较这个范围内的数值。但是,对于这个范围之外的数值,Java会创建新的对象,所以==比较的是对象的引用,而不是数值。
装箱和拆箱操作
自动装箱,相当于Java编译器替我们执行了 Integer.valueOf(XXX);
自动拆箱,相当于Java编译器替我们执行了Integer.intValue(XXX);