自动装箱——autoboxing,在JDK1.5中首次发表,指将一个基本类型变量,如:
int x=5;
直接、自动地装入代表它的包装类,如Integer对象中,而不必经过传统的方法调用,即:
Integer myInt=x;//自动装箱成为整数型包装类对象
自动装箱并不是什么魔术箱。实际上,编译器将自动调用这个包装类的构造器,如:
Integer myInt=new Integer(x);
实现所谓的装箱操作。
自动装箱体现了封装性。其目的也是为了是一个基本类型变量自动向上转型为对象。
自动卸箱——autounboxing,与自动装箱相对应,如:
int n = myInt;//myInt为一个整数型包装类对象,自动转换为其基本类型数据
实际上,编译器将自动调用Integer的intValue()方法,如:
int n = myInt.intValue();
将该包装类对象myInt的数值赋予整数型变量n。
引用还是创建?详细出处参考http://blog.csdn.net/ft305977550/article/details/8363959
在java中为了节省创建对象的时间和空间,对于一些常用的对象,会将它在内存中缓存起来。就像String一样。 直接使用String s = "str" 这种形式来产生String对象的话,如果内存中有一个也是这种方式产生的String对象的话,那么就不会新建对象,
而是直接使用之前建立的那个String对象。实际上,对于如下的范围内的简单数据类型:
1.boolean类型的值;
2.所有的byte的值;
3.在-128~127的short类型的值;
4.在-128~127的int类型的值;
5.Unicode在\ u0000~\ u00ff 之间的char类型的值。
都会先在内存中区查找。即对于布尔型及在-128~127的数值类型和字符类型实行对象引用,其他执行对象创建。例:
public class AutoBoxing {
public static void main(String[] args){
Integer n1=127;
Integer n2=127;
Integer n3=128;
Integer n4=128;
System.out.println(n1==n2);//true
System.out.println(n3==n4);//false
}
}
PS. 自动装箱与自动卸箱一样,并没有给编译器和JVM带来任何简化操作,相反却增加了编译器进行编译的中间环节。