滁州市工程建设网站,网站开发团队如何接活,大连网络推广网站优化找哪家好,wordpress使用的数据库编码1、什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候#xff0c;我们会这样#xff1a; Class a new Class(parameter); 当我们创建一个Integer对象时#xff0c;却可以这样我们会这样 Class a new Class(parameter); 当我们创建一个Integer对象时却可以这样 Integer i 100; (注意不是 int i 100; ) 实际上执行上面那句代码的时候系统为我们执行了Integer i Integer.valueOf(100); 此即基本数据类型的自动装箱功能。 2、基本数据类型与对象的差别 基本数据类型不是对象也就是使用int、double、boolean等定义的变量、常量。 基本数据类型没有可调用的方法。 eg int t 1 t. 后面是没有方法滴。 Integer t 1 t. 后面就有很多方法可让你调用了。 1什么时候自动装箱 例如Integer i 100; 相当于编译器自动为您作以下的语法编译Integer i Integer.valueOf(100); 2什么时候自动拆箱 自动拆箱(unboxing)也就是将对象中的基本数据从对象中自动取出。如下可实现自动拆箱 [java] view plaincopy Integer i 10; //装箱 int t i; //拆箱实际上执行了 int t i.intValue(); 在进行运算时也可以进行拆箱。 [java] view plaincopy Integer i 10; System.out.println(i); 3、Integer的自动装箱 [java] view plaincopy //在-128~127 之外的数 Integer i1 200; Integer i2 200; System.out.println(i1i2: (i1i2)); // 在-128~127 之内的数 Integer i3 100; Integer i4 100; System.out.println(i3i4: (i3i4)); 输出的结果为 [java] view plaincopy i1i2: false i3i4: true 说明 equals() 比较的是两个对象的值内容是否相同。 比较的是两个对象的引用内存地址是否相同也用来比较两个基本数据类型的变量值是否相等。 前面说过int 的自动装箱是系统执行了 Integer.valueOf(int i)先看看Integer.Java的源码 [java] view plaincopy public static Integer valueOf(int i) { if(i -128 i IntegerCache.high) // 没有设置的话IngegerCache.high 默认是127 return IntegerCache.cache[i 128]; else return new Integer(i); } 对于–128到127默认是127之间的值Integer.valueOf(int i) 返回的是缓存的Integer对象并不是新建对象 所以范例中i3 与 i4实际上是指向同一个对象。 而其他值执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象所以范例中i1与i2 指向的是不同的对象。 当然当不使用自动装箱功能的时候情况与普通类对象一样请看下例 [java] view plaincopy Integer i3 new Integer(100); Integer i4 new Integer(100); System.out.println(i3i4: (i3i4));//显示false 4、String 的拆箱装箱 先看个例子 [java] view plaincopy String str1 abc; String str2 abc; System.out.println(str2str1); //输出为 true System.out.println(str2.equals(str1)); //输出为 true String str3 new String(abc); String str4 new String(abc); System.out.println(str3str4); //输出为 false System.out.println(str3.equals(str4)); //输出为 true 这个怎么解释呢貌似看不出什么。那再看个例子。 [java] view plaincopy String d 2; String e 23; e e.substring(0, 1); System.out.println(e.equals(d)); //输出为 true System.out.println(ed); //输出为 false 第二个例子中e的初始值与d并不同因此e与d是各自创建了个对象ed为false 。 同理可知第一个例子中的str3与str4也是各自new了个对象而str1与str2却是引用了同一个对象。