gpt4 book ai didi

java - java子类是否使用相同的父类(super class)字段对象

转载 作者:行者123 更新时间:2023-12-02 15:15:32 24 4
gpt4 key购买 nike

我目前正在学习 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:
this.myObject.equals(super.myObject) return: true
false
BUILD SUCCESSFUL (total time: 0 seconds)

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

最佳答案

Will Subclass create a new copy myObject in memory?

没有。您根本没有在比较您认为正在比较的对象。

System.out.println("this.myObject == (super.myObject) return: " + this.myObject == (super.myObject));

比较 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));

你会得到你想要的比较,它会返回 true,因为 this.myObjectsuper.myObject 指的是同一个 对象

关于java - java子类是否使用相同的父类(super class)字段对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40862442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com