java__基本类型及自动拆箱装箱

java基本类型有八种,其中可以分为三种:

  1. 字符类型:char
  2. 布尔类型:boolean
  3. 整数类型:byte,short,int,long
  4. 浮点数:float,double

ps:java对于类型范围溢出没提示,而且string属于特殊字符串类型

类型 字节单位(1字节范围为2-7~(27-1))
boolean,byte 1
short,char 2
int,float 4
long,double 8

java自动装箱和拆箱

概述:把基本类型打包成包装类称为装箱(boxing),把包装类拆装成基本类型称为拆箱(unboxing)

包装类的作用:把基本类型打包成面向对象的类,因为某些类或方法等,不能使用基本类型只能使用对象,如集合类,所以在java中有一些方法可以把基本类型装箱。

java自动装箱方法:
// 直接声明包装类型
Integer i = 10;
// 使用包装方法
int i = 10;
Integer.value(i);
类型 包装类名
int Integer
char Charater
boolean Boolean
byte Byte
short Short
long Long
float Float
double Double
java自动拆箱方法:
//  使用包装类内自带的拆箱方法invalue();
Integer i = 10;
int b = Integer.invalue(i);
包装类缓存机制

当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128—-127的范围内,如果满足条件,则会从缓存(常量池)中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。用这种方法去降低内存使用率。

Integer a = 100;
Integer b = 100;
System.out.println(a==b); // true
System.out.prinln(a.equal(b)); // true

Integer a = 133;
Integer b = 133;
System.out.println(a==b); // false
System.out.prinln(a.equal(true)); // false

第一个a==b为true,因为数值没有超过127,所以a包装类创建后缓存了,b后创建于a一样的数值,所以b对象引用为a的对象
第二个a==b为false,数值超过127,所以并没有进行缓存,所以a==b为false
ps:包装类比较均使用equal()方法对比,不能使用==。否则只要不是缓存相同对象,无论数值是否相等,均为false。

你可能感兴趣的:(java__基本类型及自动拆箱装箱)