基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型。
Java是一种强类型语言,第一次申明变量必须说明数据类型。
位(bit) 计算机最小存储单位,存储内容总是0和1。(8bits=1byte,bit不能作为最小寻址单位)。
字节(byte)可以存储所有ASCII所有字符(这是它包含8bits的初衷),-2的8次方到2的8次方-1(-128-127),最小寻址单位。java中内置基础数据类型是字节。
字符型
char(2字节16位 )
数值类型
整型
byte(1字节8位)
short(2字节16位)
int(4字节 32位)
long (8字节 64位)
浮点数类型
float (4字节 32位)
double (8字节 64位)
布尔类型
boolean (1/8字节1位)
实际上,Java中还存在另外一种基本类型void,它也有对应的包装类java.lang.Void,不过我们无法直接对它们进行操作。
包装类(包装类均位于java.lang包)
在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。
包装类型和基础类型转换
jdk1.5后,自动拆装箱
Integer a = 5;//自动装箱
int b = a;//自动拆箱
为什么使用包装类型?
因为Java是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是Object类型。为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
整型缓存池
new Integer(123); 每次调用会返回一个新对象。
Integer.ValueOf(123); 会使用缓存池,多次调用返回同一个对象引用。
注意:自动装箱使用的Integer.ValueOf(123)。另外整型缓存池范围默认是1byte的范围,也就是超过这个范围是不存缓存池是new的。
(IntegerCache.high=127,IntegerCache.low=-128)
Integer a = 5;//自动装箱
int b = a;//自动拆箱
Integer c = new Integer(5);
Integer d= new Integer(5);
Integer e= Integer.valueOf(5);
Integer f= Integer.valueOf(5);
Integer g= Integer.valueOf(129);
Integer h= Integer.valueOf(129);//a相当于e和f取值于缓存池,而c和d都是创建新对象//g,h 超过了整型缓存池范围
System.out.println(a==c);//false
System.out.println(a==e);//true
System.out.println(c==d);//false
System.out.println(c==e);//false
System.out.println(e==f);//true
System.out.println(g==h);//false