我想知道java中一行的含义
下面一行Java代码的含义是什么我想知道java中一行的含义,java,casting,comparison,type-conversion,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 } } 我想知道下面这句话的意
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;
这是
equals
方法的一个奇怪实现
它将接受对象o
,并尝试将其强制转换为Dog
类型的对象。然后将该狗的大小与该狗的大小进行比较
这是一个有问题的方法,因为如果我们将无法投射的东西传递给狗(例如,套接字),它将抛出ClassCastException,这是一个大的no-no,并且等于(
。如果无法投射对象进行比较,则必须返回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;
}
这就是含义:将当前对象的
size
变量与另一个对象的size
变量进行相等性比较。结果为布尔值,作为equals
方法的结果返回
隐式断言另一个对象的类型相同。equals
的正确实现在这种情况下不能抛出ClassCastException
,而是返回false
。因此此实现不符合对象#equals
方法的约定
在我看来,这看起来像是开发人员感觉很聪明,并且“找到”了一种简洁地实现等于的方法。一个正确但仍然相当简洁的实现如下所示:
return o instanceof Dog && ((Dog)o).size == this.size;
将对象o强制转换为Dog
并获得对象的大小。和((Dog)o)。size
将返回int
size。1)这将对象o强制转换为Dog类
如果通过除狗形物体以外的物体,则它将抛出外壳,但
2) 然后将o的属性与当前的属性大小进行比较
然后它将返回布尔值假设您有两条狗:dog1和dog2,并且假设您调用dog1.equals(dog2)
this.size在英语中可以翻译为:“这只狗的大小”
==,英文翻译为:“具有与相同的值”
((Dog)o)size,在英语中可以翻译为:“o的大小,o是一只狗”
综合起来:
这只狗的大小与o的大小具有相同的值,o是一只狗
既然您将dog1.equals(dog2)称为dog1,那么“this dog”指的是dog1,“o”指的是dog2,给您:
dog1的大小与dog2的大小具有相同的值,并且dog2是一只狗。返回此值。大小==((dog)o)。大小;//我没有得到这行的内容}它正在将对象o投射到Dog,并获得sizethanks的向下投射ryt??JavaScript
在哪里?它也没有检查null。@Robadob抱歉,修复了。我想你的代码已经检查null了(在编辑之前)<如果o
为空=>o狗的空实例
=>为假…!空值是问题所在,可以使用进行修复!(o instanceOf Dog)
@boxed_u_ul True,尽管明确存在空检查实际上更好。@MarkoTopolnik还是很乐意让OP养成习惯,以免在考虑两个对象的情况下,他通过复杂的行走来比较大数据对象\
return o instanceof Dog && ((Dog)o).size == this.size;