2

以下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;
4

6 回答 6

3

这就是含义:将当前对象的size变量与另一个对象的size变量进行比较是否相等。结果,一个boolean值,作为equals方法的结果返回。

隐式断言另一个对象属于同一类型。这种情况下,一个正确的实现equals不能抛出 a ,而是 return 。因此,此实现不符合该方法的约定。ClassCastExceptionfalseObject#equals

对我来说,这看起来就像开发人员感觉很聪明并“找到”了一种简洁实施的方法equals。一个正确但仍然非常简洁的实现将如下所示:

return o instanceof Dog && ((Dog)o).size == this.size;
于 2013-08-16T12:25:23.877 回答
2

This is an odd implementation of the equals method.

It will take object o and attempt to cast it to an object of type Dog. It will then compare the size of that dog to the size of this dog.

This is a problematic method since if we were to pass in something that cannot be cast to a dog(a socket, for example) it would throw a ClassCastException, which is a big no-no with equals(. It must return false if the objects can't be cast for comparison.

I would rewrite it as follows:

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;
}
于 2013-08-16T12:24:49.610 回答
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
于 2013-08-16T12:25:11.390 回答
1

1) 如果传递的不是 Dog 对象,这会将 Object o 转换为 Dog 类,然后它会抛出 Casing Exceptionoin

2) 然后它将 o 的属性与当前属性进行比较 - 大小然后它将返回布尔值

于 2013-08-16T12:41:29.820 回答
0

将对象 o 转换为Dog并获取object. 并将((Dog)o).size返回int大小。

于 2013-08-16T12:28:06.000 回答
0

假设您有两条狗:dog1 和 dog2,假设您调用 dog1.equals(dog2)。

this.size,英文翻译为:“这只狗的大小”

==,在英语中会翻译为:“具有相同的价值”

( (Dog) o ).size,英文会翻译为:“o 的大小,并且 o 是一只狗”

综上所述:这条狗的大小与o的大小具有相同的值,o是一条狗。

由于您调用的是 dog1.equals(dog2),因此“this dog”指的是 dog1,“o”指的是 dog2,从而为您提供:

dog1 的大小与 dog2 的大小具有相同的值,而 dog2 是一只狗。

于 2013-08-16T12:56:49.013 回答