java子类是否使用相同的超类字段对象

Wan*_* SL 2 java

我目前正在学习Java.看下面的代码:

package classtest1;

class ClassSuper
{
    public Object myObject = new Object();

    public ClassSuper(){}
}

public class ClassTest1 extends ClassSuper
{
    public ClassTest1()
    {
        System.out.println("this.myObject.equals(super.myObject) return: " + this.myObject.equals(super.myObject));
        System.out.println("this.myObject == (super.myObject) return: " + this.myObject == (super.myObject));
    }

    public static void main(String[] args)
    {
        ClassTest1 myClassTest1 = new ClassTest1();
    }

}
Run Code Online (Sandbox Code Playgroud)

输出如下:

run:
this.myObject.equals(super.myObject) return: true
false
BUILD SUCCESSFUL (total time: 0 seconds)
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么等于和"=="不一样?使用"=="时为什么输出false.Subclass会在内存中创建一个新的副本myObject吗?

Era*_*ran 7

Subclass会在内存中创建一个新的副本myObject吗?

不.您只是不比较您认为比较的对象.

System.out.println("this.myObject == (super.myObject) return: " + this.myObject == (super.myObject));
Run Code Online (Sandbox Code Playgroud)

比较String "this.myObject == (super.myObject) return: " + this.myObject(super.myObject)并返回false.

System.out.println评估传递给的参数时,将从左到右进行评估.首先this.myObject.toString()连接到"this.myObject == (super.myObject) return: ",然后将结果与运算符String进行比较.(super.myObject)==

如果用括号包装比较:

System.out.println("this.myObject == (super.myObject) return: " + (this.myObject == super.myObject));
Run Code Online (Sandbox Code Playgroud)

你会得到你想要的比较true,因为this.myObject并且super.myObject指的是相同的Object.