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