Java 创建字符串的几种方法之间的差异

Java 创建字符串的几种方法之间的差异,java,string,string-pool,Java,String,String Pool,创建字符串的几种方法如下所示。以评论的方式在表达之后添加问题 String str = "test"; String str1 = new String(str); //Will it invoke the Constructor of String(String)? String str2 = new String("test");//Will it invoke the Constructor of String(String)? String str3 = str; //Which Co

创建字符串的几种方法如下所示。以评论的方式在表达之后添加问题

String str = "test";
String str1 = new String(str);  //Will it invoke the Constructor of String(String)?
String str2 = new String("test");//Will it invoke the Constructor of String(String)?
String str3 = str; //Which Constructor will it invoke? Or str3 only reference to str and "test" without being constructed?
String str4 = "test";//Which Constructor will it invoke? Or str4 only reference to str and "test" without being constructed?
String strnew = new String("testnew");//Will this expression create "testnew" in String Constant Pool before it creates strnew?
还有一个问题:创建str3和str4的方式有什么不同吗

无论何时在JAVA中调用
new
,它都会在heap中创建一个对象,显然它也会调用构造函数

字符串文字将转到
字符串常量池

它可能会帮助您直观地理解它


我已经阅读了这个数字。我仍然有上面显示的问题。你能看看吗?当然。首先阅读我的博文中的两行:“字符串文本将进入字符串常量池”。所以表达式“String strnew=new String(“testnew”)”将在创建strnew之前在字符串常量池中创建“testnew”?非常感谢!关于str3和str4,它将调用哪个构造函数?或者它们只是“测试”的参考?谢谢你的耐心!创建str3和str4没有区别-它们都将从池中获得对字符串对象的引用这不是一个糟糕的问题。。。