Java:基本数据的包装类

这篇博客介绍了Java中基本数据类型与其包装类的对应关系,包括自动装箱和拆箱的概念。内容涉及Integer对象的创建、转换方法如parseInt和parseDouble,以及数值转换为二进制、十六进制和八进制字符串的方法。此外,还讨论了Integer对象的缓存机制,解释了为何在特定范围内比较Integer对象时可能会得到相等的结果。
摘要由CSDN通过智能技术生成

包装类封装了基本数据类型

		//基本数据类型和他们各自包装类的对应关系
		byte -- java.lang.Byte
		short -- java.lang.Short
		int  -- java.lang.Integer
		long -- java.lang.Long
		float -- java.lang.Float
		double  -- java.lang.Double
		char  -- java.lang.Character
		boolean -- java.lang.Boolean

转换关系:

		// int --> Integer  两种方式
		Integer a = new Integer(22);
		Integer b = Integer.valueOf(22);
		
		// Integer --> int
		int c = a.intValue();
		
		// 把字符串转换为int(字符串须为纯数字)
		int d = Integer.parseInt("123");
		
		//把字符串转换为double(字符串须为纯数字)
		double d1 = Double.parseDouble("12.3");
		
		// int值转换为二进制的字符串
		String s1 = Integer.toBinaryString(10);

		// int值转换为16进制的字符串
		String s2 = Integer.toHexString(30);
		
		// int值转换为8进制的字符串
		String s3 = Integer.toOctalString(10);
		
		// String转Integer,参数字符串必须为纯数字
		Integer i1 = Integer.valueOf("123");
		Integer i2 = new Integer("12313");
		

自动装箱、自动拆箱(以Integer和int为例)

java1.5版本后,引入了自动装箱、自动拆箱。自动装箱指的是把基本数据类型转换为对应的包装类,自动拆箱指把包装类自动转换为基本数据类型,都是在编译时完成的。

//自动装箱,
//编译完后就等于是 : Integer i2  = Integer.valueOf(222);
Integer i1 = 222;

Integer i2 = new Integer(28);
int i3 = i2; //自动拆箱

在1.5之前,装箱和拆箱是这样的

Integer i1 = new Integer(223); //装
Integer.valueOf(2222);//装

Integer i2 = new Integer(28);
int i3 = i2.intValue(); //拆箱

Integer的装箱底层原理:


public static Integer valueOf(int i) {
	if (i >= IntegerCache.low && i <= IntegerCache.high)
	      return IntegerCache.cache[i + (-IntegerCache.low)];
	return new Integer(i);
}

看源码,我们可以这么理解,在内存中,有一个Integer[] 数组,有 256个对象,对象中的int值分别为 -128,-127…126,127,分别保存在下标是0~ 255的空间中。如果我们传入的值在 -128~127之间,就直接去这个缓存数组中找到对应的对象,不用再重新创建Integer对象,如果值不在这个范围,就会通过new关键字在堆内存创建一个对象。

Integer i1 = 123;
Integer i2 = 123;
//true , i1和i2两个引用都保存同一块内存地址
//123在-127~128中,缓冲区就有数据,i1和i2两个引用都指向这个对象
System.out.println(i1 == i2);
		// Integer i3 = 128;
		// 等于 Integer i3 = Integer.valueOf(128);
		//但是128不在-128~127范围内,那麽这个对象就不会被保存在常量池中,而是保存在了堆内存
		//所以i3和i4指向的两个对象,不在一个地址
		//使用 == 判断,也就是false
		Integer i3 = 128;
		Integer i4 = 128;
		System.out.println(i3 == i4);//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值