内存参考

Memory reference

c指向a还是c指向与[=13相同的内存 =] 指的是什么? 为什么下面的代码会打印“We are equal”?

提前致谢

    public static void main(String args[]) {
        String a = "10";
        String b = "10";
        String c = a;
        
        if(c.equals(b)) {
            System.out.println("We are equal ");
        }
        else {
            System.out.println("Not equal! ");
        }       
    }

Java 通过引用存储对象...引用恰好是我们使用原语时的值。

int 是原语所以

a == c => true

a == b => true

b == c => true

对于字符串,情况略有不同。 Strings 是有效的字符数组:char[] 但在 Java 中不被视为基本类型。所以:

"str1" == "str1" => false 因为您现在正在比较两个对象引用。

出于这个原因,Object class 具有 equals() 方法,该方法允许您通过对象引用 ID 以外的其他方式比较引用对象(非基元)。 String(Object.class 的子class)class 覆盖了 equals 方法。

在你的例子(上面)中你说:

So why is ab==abc false. They are both pointing to same address.

这是不正确的。 ab 指向的字符串是“meowdeal”,abc 指向的字符串也是“meowdeal”……但关键是它们是两个不同的实例。因此:

ab==abc => false - 这里检查引用是否相等 - 它们是否是相同的对象引用(不,它们不是)

ab.equals(abc) => true - 此处您要检查字符串是否相等(ab"meowdeal" 是否与 abc 的相同"meowdeal" - 是的。

这是您可能会不时遇到的曲线球面试问题之一,因此值得注意。