Nav*_*eet 1 java string jvm string-pool
在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。
所以我无法弄清楚这个字符串文字是在何时何地传递到构造函数中创建的。
任何帮助将不胜感激。谢谢
我的问题是,在创建的构造函数中传递的字符串文字“TestString”在哪里?它与字符串文字/常量相同吗?因此应该像情况 1 一样在池中创建?
正确,传递给构造函数调用的常量字符串new String("TestString")存储在字符串池中,就像语句中一样String S1 = "TestString"。
String S1 = new String("TestString");
String S2 = new String("TestString");
String S3 = "TestString";
Run Code Online (Sandbox Code Playgroud)
在本例中S1==S3给出 false,因为S3引用了由用于 的构造函数的参数创建的字符串文字S1,而S1是一个不同的字符串(因为它是使用构造函数创建的)。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |