Java 字符串对象池的作用是什么?
从Java5.0开始,Java虚拟机在启动的时候回实例化9个对象池。这9个对象池分别用来存储8中基本类型的包装类对象和String对象,主要是为了效率问题。大家应该知道,创建String对象有俩种办法,代码如下:String str1="hello";String str2=new String("hello"); 这俩种创建String对象的方法有什么区别吗?区别就在于第一种
从Java5.0开始,Java虚拟机在启动的时候回实例化9个对象池。这9个对象池分别用来存储8中基本类型的包装类对象和String对象,主要是为了效率问题。
大家应该知道,创建String对象有俩种办法,代码如下:
String str1="hello";
String str2=new String("hello");
这俩种创建String对象的方法有什么区别吗?区别就在于第一种方法在对象池中取对象,第二种方法直接生成新的对象。
当在程序中直接用双引号引起来一个字符串时,Java虚拟机(JVM)就到String的对象池中就去检查是否有一个值相同的对象。如果有,就取现成的对象;如果没有则在对象池中创建,并返回其引用。因此,可以发现下面的代码输出true:
String str1="hello";
String str2="hello";
System.out.printn(str1==str2);//true
这说明str1和str2指向同一个对象,因为它们都是在对象池中取到的,而下面的代码输出为false
String str1="hello";
String str2=new String("hello");
System.out.printn(str1==str2);//false
因为在任何情况下,只要new一个String对象都是创建了新的对象。其他的基本类型包装类的对象池与此类似,工作原理是一样的。对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能,那么自定义的类是否也可以使用对象池呢?当然可以,我这里就不写代码了~
更多推荐
所有评论(0)