Java 这到底是做什么的?
我想弄清楚,如果(this==a)行是做什么的。我正在创建一个名为OrderedDoublePair的新类,它表示x和y坐标。该方法应该检查对象参数是否为OrderedDoublePair,然后检查每个OrderedDoublePair的x和y值是否相等。我试图理解this==a行告诉我什么。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
只是检查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)将确定someObject和someOtherObject是否是相同的对象,即指向相同的内存位置
=运算符仅比较其操作数的内存位置的内容,即this和a。由于this和a都是对对象的引用,因此它们都保留内存地址。当两个变量都指向同一实例时,如果(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