我正在我的程序中创建方法.equals(Die aDie)。我是否要比较每个实例变量,包括静态变量?
发布于 2012-02-28 23:16:18
根据定义,静态变量不是实例变量,因此在同一个类的所有实例中总是相等的。
发布于 2012-02-28 23:26:34
下模布尔值等于(
aDie)
是错误的,则类将调用equals(Object)方法并忽略您的等于(Die)。还要使用equals(Object)使用的相同字段实现int hashCode()方法。
@Override public boolean equals(Object aDie){
if(aDie == null || aDie.getClass() != Die.class)return false;
if(aDie == this)return true;
Die other = (Die)aDie;
...
}
@Override public int hashCode(){
...
}您可以忽略静态字段,因为它们对于每个骰子都是相同的。
发布于 2012-02-28 23:17:50
绝对不是静态的。
是否比较所有实例变量取决于是什么决定了对象的“身份”,也就是说,什么时候你认为它们是相等的?这只能在您的特定应用程序的上下文中决定-我们需要更多信息。
例如,如果您有一个表示书籍的类,如果您只想存储关于两本书的元数据(标题、作者),则可能只比较ISBN编号来确定两本书是否为同一本书。如果您合并了两个这样的数据库,您可能希望消除重复记录。
但是,如果您正在实现实际实体图书的图书馆目录,则每个副本都很重要且各不相同,因此您可以比较ISBN和副本数量。如果您合并了两个库,您应该能够检测到重复的副本。
https://stackoverflow.com/questions/9484486
复制相似问题