内容部分参考链接:https://blog.csdn.net/wufaliang003/article/details/82347077 (写得更加详细和全面)
基本类型,或者叫做内置类型,是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