在java开发中,只要通过new关键创建的对象,都会在堆内存中动态分配一块内存。
String str=new String("x");
当程序运行到该句代码时,会在堆内存中分配一块内存控件,并在栈内存中创建一个引用变量str。该变量存储的是刚才在堆内存中分配的内存控件首地址。
String str="x"; 当程序运行到该句代码时,会在内存的缓存区中创建一个x的字符串。而不是在堆内存中动态分配一块内存。
还有一点很重要,每次通过new创建的对象都会在堆内存中分配内存空间,
比如:
String str=new String("x");
String str=new String("x");
当程序执行完上面两句时,会在堆内存中创建两个x字符串对象,虽然他们的内容都相同,但他们却是不同的对象。你可以通过equal比较这两个对象的内容,还可以通过“==”比较两个对象首地址是否相同。
String str="x";
String str="x";
这只会创建一个x字符串,当执行到第二句的时候,系统首先会去内存缓存区查找是否已经存在x了,如果存在,则直接拿来用就ok,不需要重新创建。
希望对你有所帮助!
|