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元素不会发生变化。
以上是我对自动包装和解包的理解,以及查阅的资料,如有错误,请多指教。