关于java字符串的问题

(真或假)假设字符串对象 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));

}

结果是真的,但问题的答案是假的。我想知道为什么。


大话西游666
浏览 217回答 2
2回答

侃侃尔雅

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。那么在你的例子中发生了什么?字符串实习。任何字符串文字都由编译器分配在一个特殊的池中,并且任何重复的文字共享相同的引用。所以即使文字被定义了两次,就编译器而言,它们是同一个实例。

MM们

您的测试结果为 true 的原因是 JVM 喜欢做的一件非常奇怪的事情。因为您已经定义了两个字面String量,JVM 将决定存储这些值之一,并且让 a 和 b 引用同一个字符串。这就是为什么进行==比较会导致true.正如其他人所说,这样做String b = new String("abc");将强制创建一个新的String文字,这将是一个单独的内存块。因此==比较将导致false。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java