为了账号安全,请及时绑定邮箱和手机立即绑定

关于java字符串的问题

关于java字符串的问题

大话西游666 2021-06-22 17:51:38
(真或假)假设字符串对象 b 和 c 包含相同的字符序列。那么 b == c 是真的。public static void main(String[] args) {    String a = "abc";    String b = "abc";    System.out.println(a == b);    System.out.println(a.equals(b));}结果是真的,但问题的答案是假的。我想知道为什么。
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

public static void main(String[] args) {

    String a = new String("abc");

    String b = new String("abc");


    System.out.println(a.equals(b));

    System.out.println(a == b);

}

打印true,然后false。因此,具有相同字符序列的两个字符串确实必须equal彼此关联,但可以彼此关联,也可以不==关联。


显然,a == a在所有情况下, anda是String包含与a.


但是在上面的示例中,我们创建了两个不同的实例,它们恰好包含相同的字符序列。因此a != b。


那么在你的例子中发生了什么?字符串实习。


任何字符串文字都由编译器分配在一个特殊的池中,并且任何重复的文字共享相同的引用。所以即使文字被定义了两次,就编译器而言,它们是同一个实例。


查看完整回答
反对 回复 2021-06-30
?
MM们

TA贡献1886条经验 获得超2个赞

您的测试结果为 true 的原因是 JVM 喜欢做的一件非常奇怪的事情。因为您已经定义了两个字面String量,JVM 将决定存储这些值之一,并且让 a 和 b 引用同一个字符串。这就是为什么进行==比较会导致true.

正如其他人所说,这样做String b = new String("abc");将强制创建一个新的String文字,这将是一个单独的内存块。因此==比较将导致false


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信