java – 将两个字符串与“==”进行比较:什么时候工作?

前端之家收集整理的这篇文章主要介绍了java – 将两个字符串与“==”进行比较:什么时候工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说你有三个字符串,
String s1 = "string one";
String s2 = new String("string one");
String s3 = "string one";

我知道这是真的,s1 == s2是假的,但我读到s1 == s3的地方是真的.它是否正确?为什么或者为什么不?

解决方法

字符串文字自动自动进行.所以s1 == s3是真的.字符串可以在字符串常量池中创建,也可以在堆空间中创建.如果你练习一个在堆中创建的字符串,字符串将在字符串常量池中.

当您创建一个字符串文字(String s1 =“string one”)时,字符串将在字符串常量池中创建.此外,字符串常量池不存储重复.所以当你说,

String s1 = "string one";
String s3 = "string one";

s1和s3都将指向字符串常量池中的字符串的相同实例.所以s1.equals(s3)将是真的.而s1 == s3也是如此;因为这两个指针是相同的.

但是,当您使用“new”构造函数实例化一个字符串

String s2 = new String("string one");

那么在堆空间中创建s2.堆空间是与字符串常量池不同的内存区域

所以当s1.equals(s2)为真时,s1 == s2为false;因为他们会指向不同的记忆区域.

但是,您可以转换使用“new”构造函数创建的字符串,以通过调用intern()函数将其移动到字符串常量池.所以s2.intern()将在字符串常量池中返回一个字符串;虽然s2最初是在堆中创建的.

猜你在找的Java相关文章