Java基本数据类型总共八种和八种包装类
byte(整数) ————> Byte
short(整数) ————> Short
char(字符) ————> Character
int(整数) ————> Integer
long(整数) ————> Long
float(小数) ————> Folat
double(小数) ————> Double
boolean(布尔)————> Boolean
Byte
我们先看Byte的缓存范围,当两个Byte对象用==进行比较的时候结果是true,因为==比较的是对象的地址值,因此说明底层比没有去创建一个新的对象,这两个Byte是同一个对象。所以Byte的缓存范围是在-128到127之间全部缓存,不会去创建一个新的对象。(注意:当你写的值超过了byte的取值范围时(-128到127)会出现java.lang.NumberFormatException: Value out of range. Value:"-129" Radix:10。设置的值超出了取值范围)
Short
再看Short可以看到当用==比较两个Short对象时,当我们设置的值分别是127和-128时结果是true,但当值改变成128和-129时结果是false,说明再当值是128和-129时,Byte创建了两个对象。
我们再翻看Short源码时也发现,当值超过byte取值范围后,会去创建新的对象,没有超过不会去创建新的对象。所以Short的缓存范围是-128到127之间的数值。
Integer
再看Integer,和Short一样,当我们设置的值分别是127和-128时结果是true,但当值改变成128和-129时结果是false。查看Integer底层源码时也发现超过byte取值范围会去创建新对象。所以Integer的缓存范围和Short是一样的也是-128到127
Long
相信到这大家也能猜出来Long的缓存范围,没错也是byte的取值范围(-128到127)之间。查看他们的底层都是一致的相似。
Float和Double
而关于Float和Double他们两个任何得值全都是false,并且查看他们两个的地城源码时,发现总是回去创建新的对象,所以Float和Double并没有缓存范围。
Boolean
关于Boolean因为它的值只有true和false,他们的缓存是全部都缓存,不会去创建新的对象。不管是输入什么值结果都是都是true。
Character
Character比较特殊,他的缓存范围是0到127之间。超出这个范围就会新创建对象。
总结:
Byte(全部缓存)
Boolean(全部缓存)
Short(-128到127缓存)
Integer(-128到127缓存)
Long(-128到127缓存)
Characte(0到127缓存)
Float、Double(不缓存)