Java中自动装箱、拆箱概念以及8种基本类型的包装类和常量池

Java中自动装箱、拆箱概念以及8种基本类型的包装类和常量池

自动装箱、拆箱

  1. 装箱:将基本类型用他们对应的引用类型包装起来
Integer num = 88//自动装箱,88为int类型,自动装箱成Integer类型
  1. 拆箱:将包装类型转换为对应的基本类型
int number = num;//自动拆箱,将Integer类型num拆箱为int

8种基本类型对应的引用类型

基本类型引用类型
byte(1字节)Byte
short(2字节)Short
char(2字节)Character
int(4字节)Integer
long(8字节)Long
float(4字节)Float
double(8字节)Double
boolean(未定)Boolean

8种基本类型的包装类和常量池

  1. Byte、Short、Integer、Long、Character、Boolean都实现了常量池技术。
  2. Byte、Short、Integer、Long四种包装类都默认创建了数值[-128,127]的相应类型的缓存数据。
  3. Character则是[0,127]。
  4. Boolean则是直接返回true或者false。
  5. Float和Double没有实现常量池技术。
		Integer a = 88;
		Integer b = 88;
		System.out.println(a==b);
		//true ; 数值在默认常量池中
		
		Integer aa = 128;
		Integer bb = 128;
		System.out.println(aa==bb);
		//false;数值超过了默认常量池[-128,127],因此各自新建对象
		
		Double aaa = 3.3;
		Double bbb = 3.3;
		System.out.println(aaa==bbb);
		//false;Double没有实现常量池技术,Float同理

一个帮助更好理解的例子:

		Integer i1 = 22;
		Integer i2 = 22;
		Integer i3 = 0;
		Integer i4 = new Integer(22);
		Integer i5 = new Integer(22);
		Integer i6 = new Integer(0);
		System.out.println("i1=i2 " + (i1 == i2));
		//true;因为40在默认常量池中,i1、i2用到的是同一个常量
		
		System.out.println("i1=i2+i3 " + (i1 == i2 + i3));
		//true;i2+i3操作自动拆箱后进行;相加后类型为int;
		//比较时,i1也自动拆箱
		
		System.out.println("i1=i4 " + (i1 == i4));
		//false;i4创建了新的对象,没有用默认常量池中的常量
		
		System.out.println("i4=i5 " + (i4 == i5));
		//false;
		
		System.out.println("i4=i5+i6 " + (i4 == i5 + i6));
		//true;自动拆箱后执行+操作,然后i4自动拆箱后判断是否相等
		
		System.out.println("40=i1+i3 " + (40 == i1+i3));
		//true
		
		System.out.println("40=i5+i6 " + (40 == i5 + i6));
		//true;自动拆箱后执行+操作,相加后类型为基本类型int;
		//与40比较是否相等
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值