下面的Java代码行是什么意思
class Dog {
int size;
Dog(int size) {
this.size = size;
}
public boolean equals(Object o) {
return this.size == ((Dog) o).size; // im not getting whats the meaning of this line
}
}
我想知道以下行的含义:
return this.size== ((Dog)o).size;
答案 0 :(得分:3)
这是意思:当前对象的size
变量与另一个对象的size
变量进行相等性比较。结果boolean
值将作为equals
方法的结果返回。
隐式断言使另一个对象属于同一类型。 equals
的正确实现必须不在这种情况下抛出ClassCastException
,而是返回false
。因此,此实现不符合Object#equals
方法的合同。
对我来说,这看起来像开发人员感觉很聪明,并且“找到了”简明扼要地实施equals
的方法。一个正确的,但仍然非常简洁的实现将是这样的:
return o instanceof Dog && ((Dog)o).size == this.size;
答案 1 :(得分:2)
这是equals
方法的奇怪实现。
它将占用对象o
并尝试将其强制转换为Dog
类型的对象。然后它会将该狗的大小与this
狗的大小进行比较。
这是一个有问题的方法,因为如果我们传入一些无法强制转换为狗(例如套接字)的东西,它会抛出一个ClassCastException,这对于equals(
来说是一个很大的禁忌。如果无法转换对象进行比较,必须返回false。
我会按如下方式重写:
boolean equals(Object o){
if(o==null) return false;
if(this==o) return true;
if(!o instanceOf Dog) return false;
return this.size==((Dog) o).size;
}
答案 2 :(得分:1)
((Dog)o).size
(Dog)o // means Cast o into Dog.
this.size = castedDog.size //means assign the `size` of current object the same value as casteddog object's size
答案 3 :(得分:1)
1)这会将Object o转换为Dog类
如果不是通过Dog对象传递那么它将抛出Casing Exceptioin
2)然后它将o的属性与当前属性 - 大小进行比较
然后它将返回布尔值
答案 4 :(得分:0)
将对象o转换为Dog
并获取object
的大小。 ((Dog)o).size
将返回int
大小。
答案 5 :(得分:0)
假设你有两只狗:dog1和dog2,让我们说你叫dog1.equals(dog2)。
this.size,用英文翻译成:“这只狗的大小”
==,英文将转换为:“与”
具有相同的值((Dog)o).size,用英文翻译成:“o的大小,o是狗”
放在一起: 这只狗的大小与o的大小相同,o是狗。
既然你正在调用dog1.equals(dog2),那么“这只狗”指的是dog1,“o”指的是dog2,给你:
dog1的大小与dog2的大小相同,dog2是狗。