有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符串==运算符是否比较引用?

public class Test
{
    public static void main(String args[])
    {
        String a="meow";
        String b=a+"deal";
        String c="meowdeal";
        System.out.println(b==c);
    }
}

根据我的说法==运算符比较引用。所以b==c应该打印“true” 但它打印的是“假”。我通过打印“b”和“c”的哈希代码进行检查

两者的哈希代码相同


共 (3) 个答案

  1. # 1 楼答案

    According to me == operators compares refrences .

    没错。如果两个操作数都是引用类型,==运算符比较引用。(如果任何一个操作数都是基元类型,这是不正确的……但这是另一个主题。)

    So b==c should print "true" But it prints "false" . I checked by printing hashcode of "b"and "c" .

    你的推理是错误的

       String a = "meow";
       String b = a + "deal";
       String c = "meowdeal";
    

    事实上,当代码完成时,bc引用具有相同值的不同字符串对象。实际上,JLS声明+操作符创建了一个新的字符串objext<除非表达式是常数表达式。(在本例中,它不符合常量表达式的条件,因为a是一个变量。)

    所以b == cfalse。。。因为==正在比较引用,而引用是不同的

  2. # 2 楼答案

    ==比较引用,但是对bc的引用是不同的——它们是两个不同的String实例,尽管它们包含相同的内容

    如果要比较两个字符串的内容,请使用equals()

  3. # 3 楼答案

    对象应该使用b.equals(c),基元类型应该使用==