我想知道java中一行的含义

时间:2013-08-16 12:19:52

标签: java casting comparison type-conversion

下面的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;

6 个答案:

答案 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是狗。