【发布时间】:2015-07-16 10:13:15
【问题描述】:
我们在 Java 中编写
String S1 = "TestString";
String S2 = "TestString";
然后与if(S1==S2)比较,我们得到布尔结果为真。
相同的解释是字符串常量是在字符串池中创建的,因此它与 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) 应该给我真,但它给假。
所以我无法弄清楚这个字符串文字是在何时何地在构造函数中被创建的。
任何帮助将不胜感激。 谢谢
【问题讨论】:
-
== 和 str1.equals(str2) 适用于不同的运算符/方法
标签: java string jvm string-pool