30.1 String常量池 及 String类型在内存中的存在
2020-01-21 本文已影响0人
琴匣自鸣
这里说一下步骤
1.str1 str2是直接创建的字符串,以这种形式创建的字符串都在字符串常量池中,那么str1 str2栈内保存的地址就是堆内的字符串常量池里的字符串对象,这时都是指向同一个常量池内的对象,而常量池内的对象也是保存了一个地址,保存的地址是在堆内的byte[] 数组. 所以str1== str2 比较地址是成立的
2.str3是new出来的并不在常量池内则在堆内正常创建一个字符串对象,str3指向这个字符串对象地址为0x999, 而之前创建的char[]类型数组则指向内存中对应的char[]数组对象,String类型会将这个char[]数组转化为一个byte[]数组再在内存中划出一块区域然后字符串对象指向的是这个转化出的byte[]数组