Java 这到底是做什么的?

Java 这到底是做什么的?,java,Java,我想弄清楚,如果(this==a)行是做什么的。我正在创建一个名为OrderedDoublePair的新类,它表示x和y坐标。该方法应该检查对象参数是否为OrderedDoublePair,然后检查每个OrderedDoublePair的x和y值是否相等。我试图理解this==a行告诉我什么。this==a只是检查a是否是调用equals的实例;i、 e.如果您有以下情况: public boolean equals(Object a){ if(this == a){

我想弄清楚,如果(this==a)行是做什么的。我正在创建一个名为OrderedDoublePair的新类,它表示x和y坐标。该方法应该检查对象参数是否为OrderedDoublePair,然后检查每个OrderedDoublePair的x和y值是否相等。我试图理解this==a行告诉我什么。

this==a
只是检查
a
是否是调用
equals
的实例;i、 e.如果您有以下情况:

    public boolean equals(Object a){
    if(this == a){
        return true;
    }
    if(!(a instanceof OrderedDoublePair)){
        return false;
    }
    return (((OrderedDoublePair)a).getx()==this.x && ((OrderedDoublePair)a).gety()==this.y);
}

正在检查被比较是否相等的两个对象是完全相同的实例,即a和this都是对同一对象的两个引用。

这将检查a和this是否是同一个对象,而不是与a具有相同值但在内存中位置不同的对象。

您的方法,等于,将在以下形式的表达式中使用: someObject.equals(someOtherObject)

this == a 
当方法执行时,关键字this指对象someObject,参数a指对象someOtherObject 代码if(this==a)将确定someObjectsomeOtherObject是否是相同的对象,即指向相同的内存位置


=运算符仅比较其操作数的内存位置的内容,即thisa。由于thisa都是对对象的引用,因此它们都保留内存地址。

当两个变量都指向同一实例时,如果(this==a)代码将返回true

this == a 
+-----+
|obj |此函数equals()用于定义一种特定的方法来比较两个对象是否相等:

1) 如果它们是相同的东西(对象),那么我们说它们是相等的

2) 如果输入a不是OrderedDoublePair类的对象,则不相等

3) 否则,当且仅当两个OrderedDoublePair对象具有相同的x和y时,

然后它们相等。

“a
这个
是同一个对象吗?”这就是我试图找到的。你知道
=
做什么,这个意味着什么,以及
a
是什么吗?这是指我拥有的有序双对数。参数对象a表示一个变量,该变量可能是ordereddoublepair,也可能不是ordereddoublepair。这段代码应该测试对象是否是有序双对,并检查x和y值是否正确equal@user2923691您可以看看下面我的解决方案。@user2923691是的,它看起来确实很好。所以我可以完全删除if(this==a),我会很好,对吗?@user2923691是的。就像我说的,这更像是一个优化。非常感谢@很高兴我能帮上忙。别忘了,那要看情况而定。你遇到什么问题了吗?equals方法写在哪里?我想是在有序的双对类中。x和y属性的数据类型是什么?它们是整数还是双精度?
this == a 
+-----+
| obj | <--- objA 
+-----+ <--- this (this refers to your current object)

//(this==a) will return TRUE
+------+
| obj1 | <--- objA 
+------+ 
+------+
| obj2 | <--- this
+------+ 

 //(this==a) will return FALSE