newString创建了⼏个对象
String str = new String(“abc”) 到底创建了⼏个对象?
⾸先String str是定义了⼀个字符串变量,并未产⽣对象,=不产⽣对象,那么只有后⾯的new String("abc")了。把它拆分成"abc"和new String(),⾸先在字符串常量池去寻有没有"abc"这个字符串,没有就创建⼀个“abc”字符串对象在栈中,然后new String把这个字符串对象拷贝⼀份到堆中,返回这个对象的引⽤。所以⼀共产⽣两个对象
试问str变量存储在堆中还是栈中?关键点是区分str是成员变量还是局部变量,如果是局部变量在⽅法体内,它就存储在栈中,如果是成员变量那么久跟随成员对象存储在堆中。⽐如
class A{
字符常量池是什么意思 String str = new String(“abc”)
public void getA(){
return str;
}
}
以上变量str存储在堆中
class A{
public void getA(){
String str = new String(“abc”)
return str;
}
}
以上变量str存储在栈中
String str = "a"+"b";产⽣⼏个对象?答案是3个,字符串常量区存储"a","b","ab"三个对象
String str = "a"+new String("b");产⽣⼏个对象?答案是3个,字符串常量区存储"a","b",堆中存储new String("b")的对象。
声明:
只有
使⽤引号包含⽂本的⽅式创建的String对象之间使⽤“+”连接产⽣的新对象才会被加⼊字符串池中。对于所有包含new⽅式新建对象(包括null)的“+”连接表达式,它所产⽣的新对象都不会被加⼊字符串池中
---------------------------------------------------------------------------------------
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论