在JDK5.0里,JVM在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本数据类型的包装类对象和String对象。当我们直接用8种基本类型的包装类的对象或用双引号括起来一个字符串时,JVM就要在其对象池里面去找是否有一个相同的对象,如果有,就直接从对象池中拿这个现成的对象,如果没有,就在对象池里面创建一个新的对象。
1、基本类型的包装类对象池
Integer i1 = 5;//5在对象池中取
Integer i2 = 5;
System.out.println(i1==i2);//true,i1和i2都是从对象池中取的同一个对象
而:
Integer j1 = 200;//超过Integer对象池存放数的范围,即:直接赋给一个Integer对象
Integer j2 = 200;
System.out.println(j1==j2);//false
由于Integer对象池只存放从-128–127之间的整数,若超过这个范围,则直接创建一个新的Integer对象!
类似还有Long、Byte、Short、Float……
2、String类
创建String对象有两种方法:
String str1 = "xcbeyond";
String st2 = new String("xcbeyond");
这两种不同的创建方法是有差别的,第一种方式是在对象池中拿对象,第二种方式是直接在堆内存空间创建一个新的对象。
因此,就有System.out.println(str1==str2);//false
总结:对象池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net