关于String类

来源:互联网 发布:php session memcached 编辑:程序博客网 时间:2024/06/12 22:47

因为Sting是这样定义的:public final class String extends Object,里边有final关键字,所以不能被继承。
对于
String str="a";
JVM先到字符串池中查找,看是否已经存在值为”abc”的对象,如果存在,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。所以这句代码创建了一个对象。
前面的意识就是如果“a”存在,会在堆内存中开辟空间新建一个对象,然后再把它加入常量池。
对于String str1="a";
由于常量池中已经有了,所以不会再在堆内存中新建对象,而是直接在常量池找到。此时str和str1同时指向同一个内存空间“a”;

字符串常量池的好处就是减少相同内容字符串的创建,节省内存空间。

String str2=new String("a");
因为有new,所以会在堆内存中开辟空间。