作者: hebtu666
来源:CSDN
String 对象的两种创建方式:
![01a5cdd4e2bc2ea185ca977011539db0.png](https://img-blog.csdnimg.cn/img_convert/01a5cdd4e2bc2ea185ca977011539db0.png)
这两种不同的创建方法是有差别的。
- 第一种方式是在常量池中拿对象;
- 第二种方式是直接在堆内存空间创建一个新的对象。
记住一点:只要使用 new 方法,便需要创建新的对象。
![a039e50e1e0ac3a08064cf9284374e34.png](https://img-blog.csdnimg.cn/img_convert/a039e50e1e0ac3a08064cf9284374e34.png)
String 类型的常量池比较特殊。它的主要使用方法有两种:
直接使用双引号声明出来的 String 对象会直接存储在常量池中。
如果不是用双引号声明的 String 对象,可以使用 String 提供的 intern 方法。String.intern() 是一个 Native 方法,它的作用是:如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用;如果没有,JDK1.7之前(不包含1.7)的处理方式是在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用,JDK1.7以及之后的处理方式是在常量池中记录此字符串的引用,并返回该引用。
![538d50285e0fdbd533965433fe6c8bcc.png](https://img-blog.csdnimg.cn/img_convert/538d50285e0fdbd533965433fe6c8bcc.png)
字符串拼接:
![310324a0d992a7500731d6dc5a8d1aa7.png](https://img-blog.csdnimg.cn/img_convert/310324a0d992a7500731d6dc5a8d1aa7.png)
![53a8f35f94c4dc6894a87cd4b9b1daef.png](https://img-blog.csdnimg.cn/img_convert/53a8f35f94c4dc6894a87cd4b9b1daef.png)
尽量避免多个字符串拼接,因为这样会重新创建对象。如果需要改变字符串的话,可以使用 StringBuilder 或者 StringBuffer。
将创建 1 或 2 个字符串。如果池中已存在字符串常量“abc”,则只会在堆空间创建一个字符串常量“abc”。如果池中没有字符串常量“abc”,那么它将首先在池中创建,然后在堆空间中创建,因此将创建总共 2 个字符串对象。
验证:
![040320648fdc71b4d835f0a7029be33f.png](https://img-blog.csdnimg.cn/img_convert/040320648fdc71b4d835f0a7029be33f.png)
结果:
![0ca1c71f04815f7fea041017e10c34e7.png](https://img-blog.csdnimg.cn/img_convert/0ca1c71f04815f7fea041017e10c34e7.png)
最后,我自己是一名从事了多年开发的JAVA老程序员,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:【交流】,即可免费获取。
![b46a629dafc2768fdb5a9815a767af44.png](https://img-blog.csdnimg.cn/img_convert/b46a629dafc2768fdb5a9815a767af44.png)