关于string池的深度理解
2022-06-30 10:17:15 4 举报
关于String池的理解和易错点
作者其他创作
大纲/内容
str4
str6
StringBufferabc
str8
对象实例
str5
①
0x01
堆区
str1
c
abc
str1:在堆中生成1个”a”对象,并将”a”对象的引用值0x01存储在字符串常量池的StringTable中,最后将引用地址0x01赋值给变量str1【str2、str3、str4同理】Str5:因为string池中存在“abc”,所以直接将引用地址0x04赋值给str5 【若string池中不存在“a”、“b”、“c”、“abc”,在执行String str5=\"a\"+\"b\"+\"c\";时,会将这四个对象都创建出来】Str6:若string池中不存在“abc”,那么执行该语句时,会在堆中创建2个\"abc\"对象,一个将\"abc\"对象的引用存储在字符串常量池的StringTable中,一个将\"abc\"对象的引用赋值给str6。Str7:这里走的+的拼接方法,使用StringBuffer类的append方法,得到了“abc”,这个时候内存①表示的是一个StringBuffer对象,注意不是String对象,随后,调用了Object的toString方法把StringBuffer对象装换成了String对象,生成新的对象“abc”赋值给str7【str8、str9同理】
str9
str2
0x02
a
字符串常量池
str7
0x04
0x03
栈区
str3
b
收藏
收藏
0 条评论
下一页