在使用java编程的过程中我们经常会用到String,最常用的创建字符串的方式大概就是用“”+文本的方式吧 ,但在查看String类的API时发现,String类是有好几个构造器可以用来创建一个String对象的。其中之一就是new String("") :那么这两种方式有什么区别呢?
![](https://i-blog.csdnimg.cn/blog_migrate/948717f4baeeb13b551016adcc1bd7b2.png)
我们发现当用"" 创建字符串时,如果字符串一样那么其实只创建了一个。但如果改用,String str = new String(“”) ;却是两个不同的对象。
其实这是因为 用“”+文本的方式创建的字符串保存在常量池中,常量池中没有重复的元素,比如当执行代码“abc”时,java虚拟机会先在常量池中检索是否已经有“abc”,如果有那么就将“abc”的地址赋给变量,如果没有就创建一个,然后在赋给变量。
而 String str = new string("") ;创建的对象保存在堆内存中即使内容一样还是会创建新的对象 。
更加详细的解释参考:https://www.cnblogs.com/OnlyCT/p/5433410.html