在Java中,当我们写
String S1 = "TestString";
String S2 = "TestString";
Run Code Online (Sandbox Code Playgroud)
然后与 进行比较if(S1==S2),我们得到 true 作为布尔结果。对此的解释是,字符串常量是在字符串池中创建的,因此 S1 和 S2 在这里引用的是相同的字符串常量。另外,如果我们写类似的东西
String S1 = new String("TestString");
String S2 = new String("TestString");
Run Code Online (Sandbox Code Playgroud)
然后与 进行比较if(S1==S2),我们得到 false。原因是 S1 和 S2 的引用不同,因为字符串文字是在堆中创建的。
我的问题是,在创建的构造函数中传递的字符串文字“TestString”在哪里?它与字符串文字/常量相同吗?因此应该像情况 1 一样在池中创建?如果是那么当我们在上面两个语句之后写类似的内容时
String S3 = "TestString";
Run Code Online (Sandbox Code Playgroud)
这不应该创建一个新的字符串文字,比较if(S1==S3)应该给我 true,但它给我 false。
所以我无法弄清楚这个字符串文字是在何时何地传递到构造函数中创建的。
任何帮助将不胜感激。谢谢