Java 内存引用

Java 内存引用,java,equals-operator,Java,Equals Operator,是c指向a还是c指向a指向的同一内存? 为什么下面的代码显示“我们是平等的” 提前谢谢 public static void main(String args[]) { String a = "10"; String b = "10"; String c = a; if(c.equals(b)) { System.out.println(&qu

c
指向a还是
c
指向
a
指向的同一内存? 为什么下面的代码显示“我们是平等的”

提前谢谢

    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

有了弦,情况略有不同
String
s实际上是字符数组:
char[]
但在Java中不被视为基本类型。。因此:

“str1”==“str1”
=>
false
,因为您现在正在比较两个对象引用

因此,
对象
类具有
equals()
方法,该方法允许您通过对象引用ID以外的其他对象来比较引用对象(非原语)。
字符串
(Object.class的子类)类重写
equals
方法

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

那么为什么
ab==abc
false
。他们都指向同一个地址

这是不正确的
ab
指向“meowdeal”的字符串,
abc
指向也是“meowdeal”的字符串。。。但至关重要的是,它们是两个截然不同的例子。因此:

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

ab.equals(abc)
=>
true
-这里您正在检查字符串的相等性(是
ab
“meowdeal”
abc
“meowdeal”
-是的


这是一个值得注意的曲线球面试问题。

这段代码也有同样的问题,为什么ab不等于abc?String a=“meow”;String ab=a+“deal”;String abc=“meowdeal”;System.out.println(ab==abc);