当前位置:  开发笔记 > 编程语言 > 正文

JShell/Java 9中的相等性是怎么回事?

如何解决《JShell/Java9中的相等性是怎么回事?》经验,为你挑选了1个好方法。

我一直在使用JShell来测试它,今天我遇到了相当有趣的行为.

jshell> String a = "A"
a ==> "A"

jshell> String b = "A"
b ==> "A"

jshell> a == b
$4 ==> true

jshell> "A" == "A"
$5 ==> true

我首先想知道这是否是Java 9的一个功能,我通过使用Java 9编译和运行该程序来检查它

public class Equus {
    public static void main(String... args) {
        String a = "A";
        String b = "A";
        System.out.println("a == b");
        System.out.println(a == b);
        System.out.println("\"A\" == \"A\"");
        System.out.println("A" == "A");
    }
}

有趣的是,我得到了

a == b 
true 
"A" == "A" 
true

作为我的输出也是如此.这里发生了什么?为什么ab彼此相等,为什么是"A" == "A"真的吗?



1> Sinkingpoint..:

为什么不应该呢?此行为也在以前的Java版本中展示 - 字符串文字被实现.

如您所知,==检查引用相等性 - 两个变量具有相同的内存地址.当一个字符串被实现时,该字符串的所有引用都指向实习池,因此将使用相同的字符串==.


@Eli Sadoff:不,Java字符串永远不会被终止.但无论如何,我并不是指数组的内容.我想强调它们指向同一个数组实例.所以在`String`类中,`new String("A").value =="A".value`将是'true`.
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有