我目前正在学习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吗?
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.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |