class SetType{
int i;
public SetType(int n){i=n}
public boolean equals(Object o){
return o instanceof SetType && (i==((SetType)o).i);
}
}
在return 语句中((SetType)o).i为什么通过这样的类型转化才能够引用i?
求解惑java强转类型问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- jinnianshilongnian 2012-08-21 06:02关注
1、首先equals方法属于java.lang.Object,子类需要覆盖该方法,按照覆盖规则,你必须public boolean equals(Object o) 按照这个格式进行覆盖;从而实现多态;
2、你的equals方法实现的不对,equals方法在覆盖时必须满足如下特性(直接引自javadoc): 自反性、对称性、传递性、一致性(幂等性):
[quote]public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
[/quote]3、实现:
[code="java"]public boolean equals(Object o){
if(this == o) { //一致性 自己和自己比较为true
return true;
}
if(o == null) {//对于任何非空引用值 x,x.equals(null) 都应返回 false。
return false;
}
if(!(o instanceof SetType)) { //类型不兼容 直接返回false
return false;
}
SetType st = (SetType)o; // 把o(Object类型)强制造型为SetType类型,否则获取不到SetType中的成员(Object是所有类型的父类型、提供了几个共性方法(如toString、equals、hashCode) 为所有对象继承 可以参考jdk文档);if(this.i == st.i) { return true; } return false;
}
[/code]4、可以自己测试自反性、对称性、传递性、一致性。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
- ¥30 python代码,帮调试
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥100 Jenkins自动化部署—悬赏100元