2015-09-20 61 views
-1
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); 
} 

我想弄清楚什么行if(this == a)的作用。我创建了一个名为OrderedDoublePair的新类,它表示x和y坐标。此方法应检查以查看对象参数是否为OrderedDoublePair,然后检查每个ordereddoublepair的x和y值是否彼此相等。我试图理解这个==一行告诉我什么。这是干什么的?

+3

“是'A'相同的对象'this'?” –

+0

多数民众赞成在即时通讯设法找到 – user2923691

+0

你知道什么'=='做什么'这''意味着什么'一个'是? – immibis

回答

4

this == a只检查a其上equals被称为实例;即如果你有类似的东西:

OrderedDoublePair a = ...; 
OrderedDoublePair b = a; // a and b now refer to the same instance of OrderedDoublePair 

... 

if (a.equals(b)) { // <--- 
    ... 
} 

然后this == a将在您的代码段中为true。这比任何事情都更优化,它避免了额外的xy比较,如果你知道你正在比较两件事实际上是相同的事情。您可以移除该检查并仍然获得相同的行为。

顺便说一句,这是很多equals方法中常见的成语。例如,看一看的String#equals的前几行:

public boolean equals(Object anObject) { 
    if (this == anObject) { 
     return true; 
    } 
+0

所以我有很好,对吧? – user2923691

+0

@ user2923691是的,它看起来很好。 – arshajii

+0

所以我可以完全删除if(this == a),我会好的吗? – user2923691

2
this == a 

是检查两个对象是否被比较的平等是完全一样的情况下,即既是这是相同的两个引用目的。

+0

那么我现在的代码是正确的吗? – user2923691

+0

这取决于。你遇到任何问题吗?等号写法在哪里?我想在OrderedDoublePair类中。 x和y属性的数据类型是什么?他们是整数还是双精度? –

0

这将检查是否有和此是相同的对象,而不是具有相同的值作为但在存储器中的不同位置

0

你的方法,等于一个对象,将在表达式中使用形式如下: someObject.equals(someOtherObject)

当该方法执行,关键字指对象someObject和参数一个指对象someOtherObject 代码如果(这==一个)将确定是否someObjectsomeOtherObject是相同的对象,也就是指向相同的内存位置。

==操作者只比较它的操作数,即,这一个的存储器位置的内容。由于这个一个都是对象的引用,他们拥有内存地址。

0

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

+-----+ 
| obj | <--- objA 
+-----+ <--- this (this refers to your current object) 

//(this==a) will return TRUE 

如果是下面这种情况下,它会返回(即使这两个实例可以包含在其成员完全一样的值)。

+------+ 
| obj1 | <--- objA 
+------+ 
+------+ 
| obj2 | <--- this 
+------+ 

//(this==a) will return FALSE 
0

此功能equals()方法是定义一个特定的方式来比较两个对象是否是相等:

1),如果他们是同样的事情(对象),那么我们说,他们是平等的。

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

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