Ale*_*ood 9 java string equals object
假设你有三个字符串,
String s1 = "string one";
String s2 = new String("string one");
String s3 = "string one";
Run Code Online (Sandbox Code Playgroud)
我知道这是事实,s1 == s2是false的,但我读的地方,s1 == s3是true.它是否正确?为什么或者为什么不?
Bas*_*Roy 22
字符串文字自动实现.因此s1 == s3为真.字符串可以在字符串常量池中创建,也可以在堆空间中创建.如果您实际在堆中创建了一个字符串,则该字符串将位于字符串常量池中.
创建字符串文字(String s1 ="string one")时,将在字符串常量池中创建字符串.此外,字符串常量池不存储重复项.所以,当你说,
String s1 = "string one";
String s3 = "string one";
Run Code Online (Sandbox Code Playgroud)
s1和s3都将指向字符串常量池中字符串的同一实例.所以s1.equals(s3)将是真的.并且s1 == s3也是如此; 因为两个指针都是一样的.
但是,使用"new"构造函数实例化字符串时
String s2 = new String("string one");
Run Code Online (Sandbox Code Playgroud)
然后在堆空间中创建s2.堆空间是与字符串常量池不同的内存区域
所以当s1.equals(s2)为真时,s1 == s2为假; 因为他们将指向不同的记忆区域.
但是,您可以转换使用"new"构造函数创建的字符串,以通过调用intern()函数将其移动到字符串常量池.所以s2.intern()会在字符串常量池中返回一个字符串; 虽然s2最初是在堆中创建的.
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |