加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:12:54 所属栏目:Java 来源:网络整理
导读:说你有三个字符串, String s1 = "string one";String s2 = new String("string one");String s3 = "string one"; 我知道这是真的,s1 == s2是假的,但我读到s1 == s3的地方是真的.它是否正确?为什么或者为什么不? 解决方法 字符串文字自动被自动进行.所以s1
说你有三个字符串,
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最初是在堆中创建的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读