Java的自动装箱和自动拆箱功能
首先得注意基本数据类型和类的区别,也就是Integer和int的区别。注意容器中加入的都是类的对象而不是基本数据类型。故需要先将基本数据类型打包成对象。
Integer i = 100; 编译的时候,编译器会自动将执行以下语法
Integer i = new Integer(100); 经过了自动装箱操作
public class AutoBoxDemo1
{
public static voidmain(String[] args)
{
Integer i1= 127;
Integer i2= 127;
if (i1 ==i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
}
} //这个代码最后会显示是正确的,也就是true,因为对于在-128-127之间的数,它们被装箱Integer对象后,会在内存中重用。而==用来表示比较的是同一个对象; 如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个Integer对象。 (equals()比较的是两个对象的值(内容)是否相同,而==比较的是两个对象的引用(内存地址)是否相同)
Integer i = 10; 装箱
int t = i; 拆箱 当然,在运算时,也可以自动装箱和拆箱
System.out.println(i++);
针对Integer和int的区别主要是:
Int I = 1; I 后面没有任何方法
Integer I = 1; I 后面就有好多方法
对于String类型的情况:
String str1 ="abc";
Stringstr2 = "abc"; //这两个是引用,指向同一个对象。
String str3 =new String("abc");
Stringstr4 = new String("abc"); //生成两个对象
对于基本数据类型和它的包装类的区别,基本的是两点区别:
Integer是int的包装类,int的初值为0,而Integer的初值为null
Java的intValue()和ValueOf(),前者是将Integer类型转化为int类型,而ValueOf则是将给的参数转化为Integer类型