本文记录下Java的基本数据类型的大小和自动拆装箱的概念。
Java基本数据类型的大小
boolean 1bit
char 16bit
byte 8bit
short 16bit
int 32bit
long 64bit
float 32bit
double 64bit
自动拆装箱
自动拆装箱是指计算数值时,Integer会自动转为int进行计算,而当int传入类型为Integer的引用时,int数值又会被包装为Integer。基本数据类型的常量池是-128到127之间,在这个范围中的基本数据类的包装类可以自动拆箱,比较时直接比较数值大小。
public static void main(String[] args) {
// TODO Auto-generated method stub
//int的自动拆箱和装箱只在-128到127范围中进行,超过该范围的两个Integer的 == 判断是会返回false的。
Integer a1 = 128;
Integer a2 = -128;
Integer a3 = -128;
Integer a4 = 128;
System.out.println(a1 == a4);//false
System.out.println(a2 == a3);//true
Long c1 = 128L;
Long c2 = 128L;
Long c3 = -128L;
Long c4 = -128L;
System.out.println(c1 == c2);//false
System.out.println(c3 == c4);//true
//char没有负值
//发现char也是在0到127之间自动拆箱
Character d1 = 128;
Character d2 = 128;
Character d3 = 127;
Character d4 = 127;
System.out.println(d1 == d2);//false
System.out.println(d3 == d4);//true
Integer i = 10;
Byte b = 10;
//比较Byte和Integer.两个对象无法直接比较,报错
//System.out.println(i == b);
System.out.println("i == b " + i.equals(b));//false
//答案是false,因为包装类的比较时先比较是否是同一个类,不是的话直接返回false.
int ii = 128;
short ss = 128;
long ll = 128;
char cc = 128;
System.out.println("ii == ss " + (ii == ss));//true
System.out.println("ii == ll " + (ii == ll));//true
System.out.println("ii == cc " + (ii == cc));//true
//这时候都是true,因为基本数据类型直接比较值,值一样就可以。
}