自动包装 和 自动解包

本文将深入探讨Java编程中的自动包装和自动解包概念。自动包装是指将基本类型转换为对应的包装类对象,而自动解包则是将包装类对象转换回基本类型的过程。这两个特性在Java中提高了代码的简洁性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中什么是自动包装?什么是自动解包?

就是从基础数据类型(比如:int,double……)到基础数据类型包装类(比如:Integer,Double)的转换,比如Map里是key-value对,value是Object类型,你就可以填int类型的数字,运行时自动打包为Integer类型,反之有的地方需要填int类型,你可以填Integer类型,自动解包为int类型
java 是一个面向对象的语言
八大基本数据类型,  --》 不是引用数据类型, 没有类和对象的概念
基本数据类型与包装类对应关系如下:
short Short

int Integer

long Long

       char   Character

float Float

double Double

boolean Boolean

byte            Byte
示例代码:
import java.util.*;
public class Demo4 {
public static void main(String[] args) {
		
		//数据类型的转换
		
		//解包  是把 对象类型 的数据 转换为  对应类型的基本数据类型
		//1.字符串转换为 基本数据类型 
		String str = "123";
		
		//使用Integer类提供的方法将字符串转换为 int
		int r = Integer.parseInt(str);
		System.out.println(r);
		
		//包装  是 把基本数据类型  转换为 对应的 对象类型(String,  对应的数据类型, int --- Integer)
		//Integer类的方法  ---》 对应进制的转换
		System.out.println("数字10的二进制是:" + Integer.toBinaryString(10));
		String str1 = Integer.toHexString(10);  // 把基本数据类型 转换为字符串类型
		System.out.println(str1);
		
		str1 = Integer.toOctalString(10);  // 把基本数据类型 转换为字符串类型
		System.out.println(str1);
		
		str1 = Integer.toString(10);  // 把基本数据类型 转换为字符串类型
		System.out.println(str1);
		
		//直接用toString方法 把 int 类型的数据 转变为 对应进制的 String类型的数据
		str1 = Integer.toString(10, 16);  // 把基本数据类型 转换为字符串类型
		System.out.println(str1);
		
		
		
		//2.集合中的元素 与基本数据类型的关系
		//集合会把 基本数据类型的数据进行自动包装, 也就是包成了 Integer类型 或者 Double类型的,等等
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(10);
		list.add(11);
		
		list.add(3);
		
		//自动解包
		int data = list.get(0);
		
		//3.Integer类型 和 int类型 的自动 包装 和 自动解包
		Integer i1 = new Integer(123);
		
		Integer i3 = data;
		Integer i2 = 123; // 自动包装
		Integer i4 = 124;
		
		
		int data1 = i1; // 自动解包装
		
		//Integer 是一个引用数据类型
		//Integer的变量是 引用类型的变量,它是在 堆区开辟的空间
		System.out.println(i4 == i2);
}
}

但是并不是所有的地方都会进行自动的打包和解包。有些地方存在“陷阱”,不注意的话,会产生问题。如:

java.util包中的List接口有两个remove方法,一个接收int参数,表示删除指定位置的元素;一个接收Object参数,表示删除指定的元素(内部使用equals进行元素相等的判断)。

如果有一个List<Integer> list = new ArrayList<Integer>();

list.add(1);

list.add(2);

list.add(3);

如果你调用list.remove(0);表示删除的是位置0上的元素即1。

如果你调用list.remove(new Integer(0));表示删除要0这个元素,但是list中没有这个元素,因此list元素不会发生变化。

以上是我对自动包装和解包的理解,以及查阅的资料,如有错误,请多指教。






 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值